diff --git a/.gitignore b/.gitignore index 3cdf4d79f..3f8b414be 100644 --- a/.gitignore +++ b/.gitignore @@ -355,3 +355,4 @@ MigrationBackup/ # WinMerge bak files *.bak /switcher.json +/.claude/settings.local.json diff --git a/CLAUDE.md b/CLAUDE.md index bd514d8ac..37377a82e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -31,6 +31,11 @@ Test framework: **NUnit**. Test classes use `[TestFixture]` and `[Test]` attribu ## Architecture +### Code Generation + +- favour duplicated code in codegeneration to have staticaly defined methods that provide performance over reflection based code. +- code generation is done by processing the UML model and creating handlebars templates + ### Code Generation Pipeline Most code in this repo is **auto-generated** — files marked `THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!` must not be edited directly. diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/AnnotatingElementReader.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/AnnotatingElementReader.cs index c61ad6030..29b22f2cd 100644 --- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/AnnotatingElementReader.cs +++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/AnnotatingElementReader.cs @@ -61,7 +61,8 @@ public class AnnotatingElementReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public AnnotatingElementReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + /// The optional used to track element-to-file associations + public AnnotatingElementReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -107,6 +108,8 @@ public override IAnnotatingElement Read(XmlReader xmiReader, Uri currentLocation this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AnnotatingElement", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -257,7 +260,7 @@ public override IAnnotatingElement Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -278,7 +281,7 @@ public override IAnnotatingElement Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -335,6 +338,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AnnotatingElement", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -485,7 +490,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -506,7 +511,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/AssociationReader.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/AssociationReader.cs index 8216d7169..c0d7c1a5c 100644 --- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/AssociationReader.cs +++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/AssociationReader.cs @@ -65,7 +65,8 @@ public class AssociationReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public AssociationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + /// The optional used to track element-to-file associations + public AssociationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -111,6 +112,8 @@ public override IAssociation Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Association", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -357,7 +360,7 @@ public override IAssociation Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -378,7 +381,7 @@ public override IAssociation Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -399,7 +402,7 @@ public override IAssociation Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -420,7 +423,7 @@ public override IAssociation Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -477,6 +480,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Association", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -723,7 +728,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -744,7 +749,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -765,7 +770,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -786,7 +791,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/DependencyReader.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/DependencyReader.cs index 1264907be..2d8a36e74 100644 --- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/DependencyReader.cs +++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/DependencyReader.cs @@ -62,7 +62,8 @@ public class DependencyReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public DependencyReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + /// The optional used to track element-to-file associations + public DependencyReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -108,6 +109,8 @@ public override IDependency Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Dependency", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -290,7 +293,7 @@ public override IDependency Read(XmlReader xmiReader, Uri currentLocation) } else { - var clientValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var clientValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Client.Add(clientValue); } @@ -371,7 +374,7 @@ public override IDependency Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -392,7 +395,7 @@ public override IDependency Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -413,7 +416,7 @@ public override IDependency Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -434,7 +437,7 @@ public override IDependency Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -455,7 +458,7 @@ public override IDependency Read(XmlReader xmiReader, Uri currentLocation) } else { - var supplierValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var supplierValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Supplier.Add(supplierValue); } @@ -512,6 +515,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Dependency", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -694,7 +699,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var clientValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var clientValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Client.Add(clientValue); } @@ -775,7 +780,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -796,7 +801,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -817,7 +822,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -838,7 +843,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -859,7 +864,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var supplierValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var supplierValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Supplier.Add(supplierValue); } diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/EnumerationDefinitionReader.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/EnumerationDefinitionReader.cs index 32b744c87..c401061c9 100644 --- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/EnumerationDefinitionReader.cs +++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/EnumerationDefinitionReader.cs @@ -86,7 +86,8 @@ public class EnumerationDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public EnumerationDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + /// The optional used to track element-to-file associations + public EnumerationDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -132,6 +133,8 @@ public override IEnumerationDefinition Read(XmlReader xmiReader, Uri currentLoca this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "EnumerationDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -348,7 +351,7 @@ public override IEnumerationDefinition Read(XmlReader xmiReader, Uri currentLoca } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -369,7 +372,7 @@ public override IEnumerationDefinition Read(XmlReader xmiReader, Uri currentLoca } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -426,6 +429,8 @@ public override async Task ReadAsync(XmlReader xmiReader this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "EnumerationDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -642,7 +647,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -663,7 +668,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/FeatureReader.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/FeatureReader.cs index 420b09617..f1a8d5f0d 100644 --- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/FeatureReader.cs +++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/FeatureReader.cs @@ -64,7 +64,8 @@ public class FeatureReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public FeatureReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + /// The optional used to track element-to-file associations + public FeatureReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -110,6 +111,8 @@ public override IFeature Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Feature", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -502,7 +505,7 @@ public override IFeature Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -523,7 +526,7 @@ public override IFeature Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -580,6 +583,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentL this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Feature", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -972,7 +977,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentL } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -993,7 +998,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentL } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/FeatureTypingReader.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/FeatureTypingReader.cs index 98c1a7336..db61c6395 100644 --- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/FeatureTypingReader.cs +++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/FeatureTypingReader.cs @@ -63,7 +63,8 @@ public class FeatureTypingReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public FeatureTypingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + /// The optional used to track element-to-file associations + public FeatureTypingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -109,6 +110,8 @@ public override IFeatureTyping Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FeatureTyping", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -331,7 +334,7 @@ public override IFeatureTyping Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -352,7 +355,7 @@ public override IFeatureTyping Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -373,7 +376,7 @@ public override IFeatureTyping Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -394,7 +397,7 @@ public override IFeatureTyping Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -415,7 +418,7 @@ public override IFeatureTyping Read(XmlReader xmiReader, Uri currentLocation) } else { - var typeValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var typeValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Type = typeValue; } @@ -436,7 +439,7 @@ public override IFeatureTyping Read(XmlReader xmiReader, Uri currentLocation) } else { - var typedFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var typedFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.TypedFeature = typedFeatureValue; } @@ -493,6 +496,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FeatureTyping", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -715,7 +720,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -736,7 +741,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -757,7 +762,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -778,7 +783,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -799,7 +804,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var typeValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var typeValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Type = typeValue; } @@ -820,7 +825,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var typedFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var typedFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.TypedFeature = typedFeatureValue; } diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/FlowReader.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/FlowReader.cs index f0c0083bc..6879e1fd2 100644 --- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/FlowReader.cs +++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/FlowReader.cs @@ -69,7 +69,8 @@ public class FlowReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public FlowReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + /// The optional used to track element-to-file associations + public FlowReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -115,6 +116,8 @@ public override IFlow Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Flow", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -559,7 +562,7 @@ public override IFlow Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -580,7 +583,7 @@ public override IFlow Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -601,7 +604,7 @@ public override IFlow Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -622,7 +625,7 @@ public override IFlow Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -679,6 +682,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoca this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Flow", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1123,7 +1128,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoca } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -1144,7 +1149,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoca } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1165,7 +1170,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoca } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -1186,7 +1191,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoca } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/FramedConcernMembershipReader.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/FramedConcernMembershipReader.cs index aec6ea208..2723db6d3 100644 --- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/FramedConcernMembershipReader.cs +++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/FramedConcernMembershipReader.cs @@ -67,7 +67,8 @@ public class FramedConcernMembershipReader : XmiDataReader /// The injected used to register and process external references /// The injected used to set up logging - public FramedConcernMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + /// The optional used to track element-to-file associations + public FramedConcernMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -113,6 +114,8 @@ public override IFramedConcernMembership Read(XmlReader xmiReader, Uri currentLo this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FramedConcernMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -347,7 +350,7 @@ public override IFramedConcernMembership Read(XmlReader xmiReader, Uri currentLo } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -368,7 +371,7 @@ public override IFramedConcernMembership Read(XmlReader xmiReader, Uri currentLo } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -389,7 +392,7 @@ public override IFramedConcernMembership Read(XmlReader xmiReader, Uri currentLo } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -410,7 +413,7 @@ public override IFramedConcernMembership Read(XmlReader xmiReader, Uri currentLo } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -479,6 +482,8 @@ public override async Task ReadAsync(XmlReader xmiRead this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FramedConcernMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -713,7 +718,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -734,7 +739,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -755,7 +760,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -776,7 +781,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/LiteralIntegerReader.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/LiteralIntegerReader.cs index ee51eea31..d2bd9f22d 100644 --- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/LiteralIntegerReader.cs +++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/LiteralIntegerReader.cs @@ -67,7 +67,8 @@ public class LiteralIntegerReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public LiteralIntegerReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + /// The optional used to track element-to-file associations + public LiteralIntegerReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -113,6 +114,8 @@ public override ILiteralInteger Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "LiteralInteger", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -515,7 +518,7 @@ public override ILiteralInteger Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -536,7 +539,7 @@ public override ILiteralInteger Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -605,6 +608,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "LiteralInteger", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1007,7 +1012,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1028,7 +1033,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/LiteralRationalReader.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/LiteralRationalReader.cs index de420df3a..583ee0fd8 100644 --- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/LiteralRationalReader.cs +++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/LiteralRationalReader.cs @@ -67,7 +67,8 @@ public class LiteralRationalReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public LiteralRationalReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + /// The optional used to track element-to-file associations + public LiteralRationalReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -113,6 +114,8 @@ public override ILiteralRational Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "LiteralRational", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -515,7 +518,7 @@ public override ILiteralRational Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -536,7 +539,7 @@ public override ILiteralRational Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -605,6 +608,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "LiteralRational", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1007,7 +1012,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1028,7 +1033,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/MembershipReader.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/MembershipReader.cs index 5a78c2a75..7437fb907 100644 --- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/MembershipReader.cs +++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/MembershipReader.cs @@ -62,7 +62,8 @@ public class MembershipReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public MembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + /// The optional used to track element-to-file associations + public MembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -108,6 +109,8 @@ public override IMembership Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Membership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -344,7 +347,7 @@ public override IMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var memberElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var memberElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.MemberElement = memberElementValue; } @@ -389,7 +392,7 @@ public override IMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -410,7 +413,7 @@ public override IMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -431,7 +434,7 @@ public override IMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -452,7 +455,7 @@ public override IMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -521,6 +524,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Membership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -757,7 +762,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var memberElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var memberElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.MemberElement = memberElementValue; } @@ -802,7 +807,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -823,7 +828,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -844,7 +849,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -865,7 +870,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/MultiplicityRangeReader.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/MultiplicityRangeReader.cs index 240d7cb9b..de0bbd2aa 100644 --- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/MultiplicityRangeReader.cs +++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/MultiplicityRangeReader.cs @@ -66,7 +66,8 @@ public class MultiplicityRangeReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public MultiplicityRangeReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + /// The optional used to track element-to-file associations + public MultiplicityRangeReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +113,8 @@ public override IMultiplicityRange Read(XmlReader xmiReader, Uri currentLocation this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "MultiplicityRange", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -504,7 +507,7 @@ public override IMultiplicityRange Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -525,7 +528,7 @@ public override IMultiplicityRange Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -582,6 +585,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "MultiplicityRange", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -974,7 +979,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -995,7 +1000,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/OwningMembershipReader.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/OwningMembershipReader.cs index 43aa08144..c04f8ba78 100644 --- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/OwningMembershipReader.cs +++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/OwningMembershipReader.cs @@ -62,7 +62,8 @@ public class OwningMembershipReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public OwningMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + /// The optional used to track element-to-file associations + public OwningMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -108,6 +109,8 @@ public override IOwningMembership Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "OwningMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -320,7 +323,7 @@ public override IOwningMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -341,7 +344,7 @@ public override IOwningMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -362,7 +365,7 @@ public override IOwningMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -383,7 +386,7 @@ public override IOwningMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -452,6 +455,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "OwningMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -664,7 +669,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -685,7 +690,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -706,7 +711,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -727,7 +732,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/ReferenceSubsettingReader.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/ReferenceSubsettingReader.cs index 1dac13566..2914a19b2 100644 --- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/ReferenceSubsettingReader.cs +++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/ReferenceSubsettingReader.cs @@ -63,7 +63,8 @@ public class ReferenceSubsettingReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ReferenceSubsettingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + /// The optional used to track element-to-file associations + public ReferenceSubsettingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -109,6 +110,8 @@ public override IReferenceSubsetting Read(XmlReader xmiReader, Uri currentLocati this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ReferenceSubsetting", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -321,7 +324,7 @@ public override IReferenceSubsetting Read(XmlReader xmiReader, Uri currentLocati } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -342,7 +345,7 @@ public override IReferenceSubsetting Read(XmlReader xmiReader, Uri currentLocati } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -363,7 +366,7 @@ public override IReferenceSubsetting Read(XmlReader xmiReader, Uri currentLocati } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -384,7 +387,7 @@ public override IReferenceSubsetting Read(XmlReader xmiReader, Uri currentLocati } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -405,7 +408,7 @@ public override IReferenceSubsetting Read(XmlReader xmiReader, Uri currentLocati } else { - var referencedFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var referencedFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.ReferencedFeature = referencedFeatureValue; } @@ -462,6 +465,8 @@ public override async Task ReadAsync(XmlReader xmiReader, this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ReferenceSubsetting", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -674,7 +679,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -695,7 +700,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -716,7 +721,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -737,7 +742,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -758,7 +763,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var referencedFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var referencedFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.ReferencedFeature = referencedFeatureValue; } diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/RequirementUsageReader.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/RequirementUsageReader.cs index c0014714f..a84d9989f 100644 --- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/RequirementUsageReader.cs +++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/RequirementUsageReader.cs @@ -91,7 +91,8 @@ public class RequirementUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public RequirementUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + /// The optional used to track element-to-file associations + public RequirementUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -137,6 +138,8 @@ public override IRequirementUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "RequirementUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -549,7 +552,7 @@ public override IRequirementUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -570,7 +573,7 @@ public override IRequirementUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -651,6 +654,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "RequirementUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1063,7 +1068,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1084,7 +1089,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/SelectExpressionReader.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/SelectExpressionReader.cs index 772f007e1..683c69458 100644 --- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/SelectExpressionReader.cs +++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/SelectExpressionReader.cs @@ -67,7 +67,8 @@ public class SelectExpressionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public SelectExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + /// The optional used to track element-to-file associations + public SelectExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -113,6 +114,8 @@ public override ISelectExpression Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "SelectExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -524,7 +527,7 @@ public override ISelectExpression Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -545,7 +548,7 @@ public override ISelectExpression Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -602,6 +605,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "SelectExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1013,7 +1018,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1034,7 +1039,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/SubclassificationReader.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/SubclassificationReader.cs index f33076269..592af9d80 100644 --- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/SubclassificationReader.cs +++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/SubclassificationReader.cs @@ -63,7 +63,8 @@ public class SubclassificationReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public SubclassificationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + /// The optional used to track element-to-file associations + public SubclassificationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -109,6 +110,8 @@ public override ISubclassification Read(XmlReader xmiReader, Uri currentLocation this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Subclassification", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -331,7 +334,7 @@ public override ISubclassification Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -352,7 +355,7 @@ public override ISubclassification Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -373,7 +376,7 @@ public override ISubclassification Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -394,7 +397,7 @@ public override ISubclassification Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -415,7 +418,7 @@ public override ISubclassification Read(XmlReader xmiReader, Uri currentLocation } else { - var subclassifierValue = (IClassifier)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var subclassifierValue = (IClassifier)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Subclassifier = subclassifierValue; } @@ -436,7 +439,7 @@ public override ISubclassification Read(XmlReader xmiReader, Uri currentLocation } else { - var superclassifierValue = (IClassifier)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var superclassifierValue = (IClassifier)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Superclassifier = superclassifierValue; } @@ -493,6 +496,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Subclassification", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -715,7 +720,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -736,7 +741,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -757,7 +762,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -778,7 +783,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -799,7 +804,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var subclassifierValue = (IClassifier)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var subclassifierValue = (IClassifier)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Subclassifier = subclassifierValue; } @@ -820,7 +825,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var superclassifierValue = (IClassifier)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var superclassifierValue = (IClassifier)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Superclassifier = superclassifierValue; } diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/TextualRepresentationReader.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/TextualRepresentationReader.cs index c9a2ddab9..f97035a71 100644 --- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/TextualRepresentationReader.cs +++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/TextualRepresentationReader.cs @@ -61,7 +61,8 @@ public class TextualRepresentationReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public TextualRepresentationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + /// The optional used to track element-to-file associations + public TextualRepresentationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -107,6 +108,8 @@ public override ITextualRepresentation Read(XmlReader xmiReader, Uri currentLoca this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "TextualRepresentation", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -295,7 +298,7 @@ public override ITextualRepresentation Read(XmlReader xmiReader, Uri currentLoca } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -316,7 +319,7 @@ public override ITextualRepresentation Read(XmlReader xmiReader, Uri currentLoca } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -373,6 +376,8 @@ public override async Task ReadAsync(XmlReader xmiReader this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "TextualRepresentation", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -561,7 +566,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -582,7 +587,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/UsageReader.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/UsageReader.cs index a91ef454f..076911158 100644 --- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/UsageReader.cs +++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenReaders/UsageReader.cs @@ -87,7 +87,8 @@ public class UsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public UsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + /// The optional used to track element-to-file associations + public UsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -133,6 +134,8 @@ public override IUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Usage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -525,7 +528,7 @@ public override IUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -546,7 +549,7 @@ public override IUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -603,6 +606,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoc this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Usage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -995,7 +1000,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoc } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1016,7 +1021,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoc } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.CodeGenerator.Tests/Generators/UmlHandleBarsGenerators/UmlCoreXmiWriterGeneratorTestFixture.cs b/SysML2.NET.CodeGenerator.Tests/Generators/UmlHandleBarsGenerators/UmlCoreXmiWriterGeneratorTestFixture.cs new file mode 100644 index 000000000..cf6aaa900 --- /dev/null +++ b/SysML2.NET.CodeGenerator.Tests/Generators/UmlHandleBarsGenerators/UmlCoreXmiWriterGeneratorTestFixture.cs @@ -0,0 +1,53 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.CodeGenerator.Tests.Generators.UmlHandleBarsGenerators +{ + using System.IO; + using System.Threading.Tasks; + + using NUnit.Framework; + + using SysML2.NET.CodeGenerator.Generators.UmlHandleBarsGenerators; + + [TestFixture] + public class UmlCoreXmiWriterGeneratorTestFixture + { + private DirectoryInfo umlXmiWriterDirectoryInfo; + private UmlCoreXmiWriterGenerator umlCoreXmiWriterGenerator; + + [OneTimeSetUp] + public void OneTimeSetup() + { + var directoryInfo = new DirectoryInfo(TestContext.CurrentContext.TestDirectory); + + var path = Path.Combine("UML", "_SysML2.NET.Serializer.Xmi.AutoGenWriters"); + + this.umlXmiWriterDirectoryInfo = directoryInfo.CreateSubdirectory(path); + this.umlCoreXmiWriterGenerator = new UmlCoreXmiWriterGenerator(); + } + + [Test] + public async Task VerifyXmiWritersAreGenerated() + { + await Assert.ThatAsync(() => this.umlCoreXmiWriterGenerator.GenerateAsync(GeneratorSetupFixture.XmiReaderResult, this.umlXmiWriterDirectoryInfo), Throws.Nothing); + } + } +} diff --git a/SysML2.NET.CodeGenerator/Generators/UmlHandleBarsGenerators/UmlCoreXmiWriterGenerator.cs b/SysML2.NET.CodeGenerator/Generators/UmlHandleBarsGenerators/UmlCoreXmiWriterGenerator.cs new file mode 100644 index 000000000..61e1ba1d5 --- /dev/null +++ b/SysML2.NET.CodeGenerator/Generators/UmlHandleBarsGenerators/UmlCoreXmiWriterGenerator.cs @@ -0,0 +1,194 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.CodeGenerator.Generators.UmlHandleBarsGenerators +{ + using System; + using System.IO; + using System.Linq; + using System.Threading.Tasks; + + using SysML2.NET.CodeGenerator.Extensions; + using SysML2.NET.CodeGenerator.HandleBarHelpers; + + using uml4net.Extensions; + using uml4net.StructuredClassifiers; + using uml4net.xmi.Readers; + + /// + /// A UML Handlebars based XMI Writer code generator + /// + public class UmlCoreXmiWriterGenerator : UmlHandleBarsGenerator + { + /// + /// Gets the name of the Xmi Writer template + /// + private const string XmiWriterTemplateName = "core-xmi-writer-template"; + + /// + /// Gets the name of the Xmi Writer Facade template + /// + private const string XmiWriterFacadeTemplateName = "core-xmi-writer-facade-template"; + + /// + /// Generates code specific to the concrete implementation + /// + /// + /// the that contains the UML model to generate from + /// + /// + /// The target + /// + /// + /// an awaitable + /// + public override async Task GenerateAsync(XmiReaderResult xmiReaderResult, DirectoryInfo outputDirectory) + { + await this.GenerateXmiWriters(xmiReaderResult, outputDirectory); + await this.GenerateXmiWriterFacade(xmiReaderResult, outputDirectory); + } + + /// + /// Generates XMI Writer classes for all concrete + /// + /// the that contains the UML model to generate from + /// + /// The target + /// + /// + /// an awaitable + /// + /// + /// In case of null value for or + /// + /// + private Task GenerateXmiWriters(XmiReaderResult xmiReaderResult, DirectoryInfo outputDirectory) + { + ArgumentNullException.ThrowIfNull(xmiReaderResult); + ArgumentNullException.ThrowIfNull(outputDirectory); + + return this.GenerateXmiWritersInternal(xmiReaderResult, outputDirectory); + } + + /// + /// Generates XMI Writer classes for all concrete + /// + /// the that contains the UML model to generate from + /// + /// The target + /// + /// + /// an awaitable + /// + private async Task GenerateXmiWritersInternal(XmiReaderResult xmiReaderResult, DirectoryInfo outputDirectory) + { + var template = this.Templates[XmiWriterTemplateName]; + + var classes = xmiReaderResult.QueryContainedAndImported("SysML") + .SelectMany(x => x.PackagedElement.OfType()) + .Where(x => !x.IsAbstract) + .ToList(); + + foreach (var umlClass in classes) + { + var generatedXmiWriter = template(umlClass); + + generatedXmiWriter = this.CodeCleanup(generatedXmiWriter); + + var fileName = $"{umlClass.Name.CapitalizeFirstLetter()}Writer.cs"; + await WriteAsync(generatedXmiWriter, outputDirectory, fileName); + } + } + + /// + /// Generates XMI Writer facade class for all concrete + /// + /// the that contains the UML model to generate from + /// + /// The target + /// + /// + /// an awaitable + /// + /// + /// In case of null value for or + /// + /// + private Task GenerateXmiWriterFacade(XmiReaderResult xmiReaderResult, DirectoryInfo outputDirectory) + { + ArgumentNullException.ThrowIfNull(xmiReaderResult); + ArgumentNullException.ThrowIfNull(outputDirectory); + + return this.GenerateXmiWriterFacadeInternal(xmiReaderResult, outputDirectory); + } + + /// + /// Generates XMI Writer facade class for all concrete + /// + /// the that contains the UML model to generate from + /// + /// The target + /// + /// + /// an awaitable + /// + private async Task GenerateXmiWriterFacadeInternal(XmiReaderResult xmiReaderResult, DirectoryInfo outputDirectory) + { + var template = this.Templates[XmiWriterFacadeTemplateName]; + + var classes = xmiReaderResult.QueryContainedAndImported("SysML") + .SelectMany(x => x.PackagedElement.OfType()) + .Where(x => !x.IsAbstract) + .OrderBy(x => x.Name) + .ToList(); + + var generatedFacade = template(classes); + generatedFacade = this.CodeCleanup(generatedFacade); + await WriteAsync(generatedFacade, outputDirectory, "XmiDataWriterFacade.cs"); + } + + /// + /// Register the custom helpers + /// + protected override void RegisterHelpers() + { + this.Handlebars.RegisterNamedElementHelper(); + this.Handlebars.RegisterSafeContextHelper(); + this.Handlebars.RegisterClassHelper(); + SysML2.NET.CodeGenerator.HandleBarHelpers.PropertyHelper.RegisterPropertyHelper(this.Handlebars); + uml4net.HandleBars.StringHelper.RegisterStringHelper(this.Handlebars); + uml4net.HandleBars.ClassHelper.RegisterClassHelper(this.Handlebars); + uml4net.HandleBars.PropertyHelper.RegisterPropertyHelper(this.Handlebars); + } + + /// + /// Register the code templates + /// + protected override void RegisterTemplates() + { + this.RegisterTemplate(XmiWriterTemplateName); + this.RegisterTemplate(XmiWriterFacadeTemplateName); + this.RegisterPartialTemplate("core-xmi-writer-partial-for-attribute-template"); + this.RegisterPartialTemplate("core-xmi-writer-partial-for-element-template"); + this.RegisterPartialTemplate("core-xmi-writer-partial-for-attribute-async-template"); + this.RegisterPartialTemplate("core-xmi-writer-partial-for-element-async-template"); + } + } +} diff --git a/SysML2.NET.CodeGenerator/HandleBarHelpers/ClassHelper.cs b/SysML2.NET.CodeGenerator/HandleBarHelpers/ClassHelper.cs index 53140d8d3..3446e7354 100644 --- a/SysML2.NET.CodeGenerator/HandleBarHelpers/ClassHelper.cs +++ b/SysML2.NET.CodeGenerator/HandleBarHelpers/ClassHelper.cs @@ -195,6 +195,16 @@ public static void RegisterClassHelper(this IHandlebars handlebars) var properties = umlClass.QueryAllProperties(); return properties.Where(x => x.IsComposite && !x.IsDerived); }); + + handlebars.RegisterHelper("Class.QueryAllPropertiesSorted", (context, _) => + { + if (context.Value is not IClass umlClass) + { + throw new ArgumentException("Class.QueryAllPropertiesSorted context supposed to be IClass"); + } + + return umlClass.QueryAllProperties().OrderBy(x => x.Name); + }); } } } diff --git a/SysML2.NET.CodeGenerator/HandleBarHelpers/PropertyHelper.cs b/SysML2.NET.CodeGenerator/HandleBarHelpers/PropertyHelper.cs index 85f8861ce..f46a4c938 100644 --- a/SysML2.NET.CodeGenerator/HandleBarHelpers/PropertyHelper.cs +++ b/SysML2.NET.CodeGenerator/HandleBarHelpers/PropertyHelper.cs @@ -1016,6 +1016,16 @@ public static void RegisterPropertyHelper(this IHandlebars handlebars) return property.Type.Name == "Element"; }); + handlebars.RegisterHelper("Property.QueryIsImpliedIncluded", (_, arguments) => + { + if (arguments.Single() is not IProperty property) + { + throw new ArgumentException("The #Property.QueryIsImpliedIncluded argument supposed to be IProperty"); + } + + return property.Name == "isImpliedIncluded"; + }); + handlebars.RegisterHelper("Property.WriteForNonDerivedCompositeAggregation", (writer, context, _) => { if (context.Value is not IProperty property) @@ -1037,7 +1047,80 @@ public static void RegisterPropertyHelper(this IHandlebars handlebars) stringBuilder.AppendLine($"{childVariableName} => {childVariableName}.{oppositePropertyName});"); writer.WriteSafeString(stringBuilder + Environment.NewLine); }); - } + + handlebars.RegisterHelper("Property.QueryHasDefaultValueWithDifferentValueThanDefault", (_, arguments) => + { + if (arguments.Length != 1) + { + throw new ArgumentException("The #Property.QueryHasDefaultValueWithDifferentValueThanDefault supposed to have one argument"); + } + + if (arguments[0] is not IProperty property) + { + throw new ArgumentException("The #Property.QueryHasDefaultValueWithDifferentValueThanDefault argument supposed to be an IProperty"); + } + + return property.QueryIsEnum() + ? property.QueryIsEnumPropertyWithDefaultValue() + : (property.QueryHasDefaultValue() && property.QueryIsDefaultValueDifferentThanDefault()); + }); + + handlebars.RegisterHelper("Property.WriteDefaultValue", (writer, _, arguments) => + { + if (arguments.Length != 1) + { + throw new ArgumentException("The #Property.WriteDefaultValue supposed to have one argument"); + } + + if (arguments[0] is not IProperty property) + { + throw new ArgumentException("The #Property.WriteDefaultValue argument supposed to be an IProperty"); + } + + if (property.QueryIsEnum()) + { + writer.WriteSafeString($"{property.Type.Name}.{property.QueryDefaultValueAsString().CapitalizeFirstLetter()}"); + } + else if (property.QueryIsString()) + { + writer.WriteSafeString($"\"{property.QueryDefaultValueAsString()}\""); + } + else + { + writer.WriteSafeString($"{property.QueryDefaultValueAsString()}"); + } + }); + + handlebars.RegisterHelper("Property.QueryIsEnumerableAndReferenceProperty", (_, arguments) => + { + if (arguments.Length != 1) + { + throw new ArgumentException("The #Property.QueryIsEnumerableAndReferenceProperty supposed to have one argument"); + } + + if (arguments[0] is not IProperty property) + { + throw new ArgumentException("The #Property.QueryIsEnumerableAndReferenceProperty argument supposed to be an IProperty"); + } + + return property.QueryIsEnumerable() && property.QueryIsReferenceProperty(); + }); + + handlebars.RegisterHelper("Property.IsTypeAbstract", (_, arguments) => + { + if (arguments.Length != 1) + { + throw new ArgumentException("The #Property.IsTypeAbstract supposed to have one argument"); + } + + if (arguments[0] is not IProperty property) + { + throw new ArgumentException("The #Property.IsTypeAbstract argument supposed to be an IProperty"); + } + + return property.Type is IClassifier { IsAbstract: true }; + }); + } /// /// Gets the getter implementation for an that has been redefined, for DTO generation diff --git a/SysML2.NET.CodeGenerator/SysML2.NET.CodeGenerator.csproj b/SysML2.NET.CodeGenerator/SysML2.NET.CodeGenerator.csproj index a14690e29..a3dafa207 100644 --- a/SysML2.NET.CodeGenerator/SysML2.NET.CodeGenerator.csproj +++ b/SysML2.NET.CodeGenerator/SysML2.NET.CodeGenerator.csproj @@ -211,6 +211,24 @@ Always + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + diff --git a/SysML2.NET.CodeGenerator/Templates/Uml/Partials/core-xmi-reader-partial-for-element-template.hbs b/SysML2.NET.CodeGenerator/Templates/Uml/Partials/core-xmi-reader-partial-for-element-template.hbs index 96ad1f324..cbdc59d1d 100644 --- a/SysML2.NET.CodeGenerator/Templates/Uml/Partials/core-xmi-reader-partial-for-element-template.hbs +++ b/SysML2.NET.CodeGenerator/Templates/Uml/Partials/core-xmi-reader-partial-for-element-template.hbs @@ -17,9 +17,9 @@ case"{{String.LowerCaseFirstLetter property.Name}}": else { {{#if asyncState}} - var {{String.LowerCaseFirstLetter property.Name}}Value = (I{{property.Type.Name}})await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var {{String.LowerCaseFirstLetter property.Name}}Value = (I{{property.Type.Name}})await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); {{else}} - var {{String.LowerCaseFirstLetter property.Name}}Value = (I{{property.Type.Name}})this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var {{String.LowerCaseFirstLetter property.Name}}Value = (I{{property.Type.Name}})this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); {{/if}} {{#if (Property.QueryIsEnumerable property)}} diff --git a/SysML2.NET.CodeGenerator/Templates/Uml/Partials/core-xmi-writer-partial-for-attribute-async-template.hbs b/SysML2.NET.CodeGenerator/Templates/Uml/Partials/core-xmi-writer-partial-for-attribute-async-template.hbs new file mode 100644 index 000000000..60e66b15f --- /dev/null +++ b/SysML2.NET.CodeGenerator/Templates/Uml/Partials/core-xmi-writer-partial-for-attribute-async-template.hbs @@ -0,0 +1,70 @@ +{{#if (Property.QueryIsEnumerable property)}} + {{#unless (Property.QueryIsReferenceProperty property)}} + {{#if (Property.QueryIsBool property)}} + if(poco.{{Property.WritePropertyName property}} != null && poco.{{Property.WritePropertyName property}}.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "{{String.LowerCaseFirstLetter property.Name}}", null, string.Join(" ", poco.{{Property.WritePropertyName property}})); + } + {{else}} + if(poco.{{Property.WritePropertyName property}} != null && poco.{{Property.WritePropertyName property}}.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "{{String.LowerCaseFirstLetter property.Name}}", null, string.Join(" ", poco.{{Property.WritePropertyName property}})); + } + {{/if}} + {{/unless}} +{{else}} + {{#if (Property.QueryIsReferenceProperty property)}} + if(writerOptions.WriteIdRefAsAttribute && poco.{{Property.WritePropertyName property}} != null && poco.{{Property.WritePropertyName property}}.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "{{String.LowerCaseFirstLetter property.Name}}", null, poco.{{Property.WritePropertyName property}}.Id.ToString()); + } + {{else}} + {{#if (Property.QueryHasDefaultValueWithDifferentValueThanDefault property)}} + {{#unless (Property.QueryIsBool property)}} + if(poco.{{Property.WritePropertyName property}} != {{Property.WriteDefaultValue property}}) + { + {{/unless}} + {{/if}} + {{#if (Property.QueryIsBool property)}} + {{#if (Property.QueryIsImpliedIncluded property)}} + if(writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + {{else}} + {{#if (Property.QueryHasDefaultValueWithDifferentValueThanDefault property)}} + if(!poco.{{Property.WritePropertyName property}}) + { + await xmlWriter.WriteAttributeStringAsync(null, "{{String.LowerCaseFirstLetter property.Name}}", null, "false"); + } + {{else}} + if(poco.{{Property.WritePropertyName property}}) + { + await xmlWriter.WriteAttributeStringAsync(null, "{{String.LowerCaseFirstLetter property.Name}}", null, "true"); + } + {{/if}} + {{/if}} + {{else if (Property.QueryIsEnum property)}} + {{#if (Property.QueryIsNullable property)}} + if(poco.{{Property.WritePropertyName property}}.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "{{String.LowerCaseFirstLetter property.Name}}", null, poco.{{Property.WritePropertyName property}}.Value.ToString().ToLower()); + } + {{else}} + await xmlWriter.WriteAttributeStringAsync(null, "{{String.LowerCaseFirstLetter property.Name}}", null, poco.{{Property.WritePropertyName property}}.ToString().ToLower()); + {{/if}} + {{else if (Property.QueryIsNumeric property)}} + await xmlWriter.WriteAttributeStringAsync(null, "{{String.LowerCaseFirstLetter property.Name}}", null, poco.{{Property.WritePropertyName property}}.ToString(CultureInfo.InvariantCulture)); + {{else}} + if(!string.IsNullOrWhiteSpace(poco.{{Property.WritePropertyName property}})) + { + await xmlWriter.WriteAttributeStringAsync(null, "{{String.LowerCaseFirstLetter property.Name}}", null, poco.{{Property.WritePropertyName property}}); + } + {{/if}} + {{#if (Property.QueryHasDefaultValueWithDifferentValueThanDefault property)}} + {{#unless (Property.QueryIsBool property)}} + } + {{/unless}} + {{/if}} + {{/if}} +{{/if}} diff --git a/SysML2.NET.CodeGenerator/Templates/Uml/Partials/core-xmi-writer-partial-for-attribute-template.hbs b/SysML2.NET.CodeGenerator/Templates/Uml/Partials/core-xmi-writer-partial-for-attribute-template.hbs new file mode 100644 index 000000000..90355107c --- /dev/null +++ b/SysML2.NET.CodeGenerator/Templates/Uml/Partials/core-xmi-writer-partial-for-attribute-template.hbs @@ -0,0 +1,70 @@ +{{#if (Property.QueryIsEnumerable property)}} + {{#unless (Property.QueryIsReferenceProperty property)}} + {{#if (Property.QueryIsBool property)}} + if(poco.{{Property.WritePropertyName property}} != null && poco.{{Property.WritePropertyName property}}.Count > 0) + { + xmlWriter.WriteAttributeString("{{String.LowerCaseFirstLetter property.Name}}", string.Join(" ", poco.{{Property.WritePropertyName property}})); + } + {{else}} + if(poco.{{Property.WritePropertyName property}} != null && poco.{{Property.WritePropertyName property}}.Count > 0) + { + xmlWriter.WriteAttributeString("{{String.LowerCaseFirstLetter property.Name}}", string.Join(" ", poco.{{Property.WritePropertyName property}})); + } + {{/if}} + {{/unless}} +{{else}} + {{#if (Property.QueryIsReferenceProperty property)}} + if(writerOptions.WriteIdRefAsAttribute && poco.{{Property.WritePropertyName property}} != null && poco.{{Property.WritePropertyName property}}.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("{{String.LowerCaseFirstLetter property.Name}}", poco.{{Property.WritePropertyName property}}.Id.ToString()); + } + {{else}} + {{#if (Property.QueryHasDefaultValueWithDifferentValueThanDefault property)}} + {{#unless (Property.QueryIsBool property)}} + if(poco.{{Property.WritePropertyName property}} != {{Property.WriteDefaultValue property}}) + { + {{/unless}} + {{/if}} + {{#if (Property.QueryIsBool property)}} + {{#if (Property.QueryIsImpliedIncluded property)}} + if(writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + {{else}} + {{#if (Property.QueryHasDefaultValueWithDifferentValueThanDefault property)}} + if(!poco.{{Property.WritePropertyName property}}) + { + xmlWriter.WriteAttributeString("{{String.LowerCaseFirstLetter property.Name}}", "false"); + } + {{else}} + if(poco.{{Property.WritePropertyName property}}) + { + xmlWriter.WriteAttributeString("{{String.LowerCaseFirstLetter property.Name}}", "true"); + } + {{/if}} + {{/if}} + {{else if (Property.QueryIsEnum property)}} + {{#if (Property.QueryIsNullable property)}} + if(poco.{{Property.WritePropertyName property}}.HasValue) + { + xmlWriter.WriteAttributeString("{{String.LowerCaseFirstLetter property.Name}}", poco.{{Property.WritePropertyName property}}.Value.ToString().ToLower()); + } + {{else}} + xmlWriter.WriteAttributeString("{{String.LowerCaseFirstLetter property.Name}}", poco.{{Property.WritePropertyName property}}.ToString().ToLower()); + {{/if}} + {{else if (Property.QueryIsNumeric property)}} + xmlWriter.WriteAttributeString("{{String.LowerCaseFirstLetter property.Name}}", poco.{{Property.WritePropertyName property}}.ToString(CultureInfo.InvariantCulture)); + {{else}} + if(!string.IsNullOrWhiteSpace(poco.{{Property.WritePropertyName property}})) + { + xmlWriter.WriteAttributeString("{{String.LowerCaseFirstLetter property.Name}}", poco.{{Property.WritePropertyName property}}); + } + {{/if}} + {{#if (Property.QueryHasDefaultValueWithDifferentValueThanDefault property)}} + {{#unless (Property.QueryIsBool property)}} + } + {{/unless}} + {{/if}} + {{/if}} +{{/if}} diff --git a/SysML2.NET.CodeGenerator/Templates/Uml/Partials/core-xmi-writer-partial-for-element-async-template.hbs b/SysML2.NET.CodeGenerator/Templates/Uml/Partials/core-xmi-writer-partial-for-element-async-template.hbs new file mode 100644 index 000000000..be4920bb9 --- /dev/null +++ b/SysML2.NET.CodeGenerator/Templates/Uml/Partials/core-xmi-writer-partial-for-element-async-template.hbs @@ -0,0 +1,25 @@ +{{#if (Property.QueryIsEnumerable property)}} + if(poco.{{Property.WritePropertyName property}} != null) + { + foreach(var item in poco.{{Property.WritePropertyName property}}) + { + {{#if property.IsComposite}} + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "{{String.LowerCaseFirstLetter property.Name}}", writerOptions, elementOriginMap, currentFileUri{{#if property.Type.IsAbstract}}, true{{/if}}); + {{else}} + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "{{String.LowerCaseFirstLetter property.Name}}", elementOriginMap, currentFileUri{{#if property.Type.IsAbstract}}, true{{/if}}); + {{/if}} + } + } +{{else}} + if(poco.{{Property.WritePropertyName property}} != null) + { + {{#if property.IsComposite}} + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.{{Property.WritePropertyName property}}, "{{String.LowerCaseFirstLetter property.Name}}", writerOptions, elementOriginMap, currentFileUri{{#if property.Type.IsAbstract}}, true{{/if}}); + {{else}} + if(!writerOptions.WriteIdRefAsAttribute || !poco.{{Property.WritePropertyName property}}.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.{{Property.WritePropertyName property}}, "{{String.LowerCaseFirstLetter property.Name}}", elementOriginMap, currentFileUri{{#if property.Type.IsAbstract}}, true{{/if}}); + } + {{/if}} + } +{{/if}} diff --git a/SysML2.NET.CodeGenerator/Templates/Uml/Partials/core-xmi-writer-partial-for-element-template.hbs b/SysML2.NET.CodeGenerator/Templates/Uml/Partials/core-xmi-writer-partial-for-element-template.hbs new file mode 100644 index 000000000..e7e8da642 --- /dev/null +++ b/SysML2.NET.CodeGenerator/Templates/Uml/Partials/core-xmi-writer-partial-for-element-template.hbs @@ -0,0 +1,25 @@ +{{#if (Property.QueryIsEnumerable property)}} + if(poco.{{Property.WritePropertyName property}} != null) + { + foreach(var item in poco.{{Property.WritePropertyName property}}) + { + {{#if property.IsComposite}} + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "{{String.LowerCaseFirstLetter property.Name}}", writerOptions, elementOriginMap, currentFileUri{{#if property.Type.IsAbstract}}, true{{/if}}); + {{else}} + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "{{String.LowerCaseFirstLetter property.Name}}", elementOriginMap, currentFileUri{{#if property.Type.IsAbstract}}, true{{/if}}); + {{/if}} + } + } +{{else}} + if(poco.{{Property.WritePropertyName property}} != null) + { + {{#if property.IsComposite}} + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.{{Property.WritePropertyName property}}, "{{String.LowerCaseFirstLetter property.Name}}", writerOptions, elementOriginMap, currentFileUri{{#if property.Type.IsAbstract}}, true{{/if}}); + {{else}} + if(!writerOptions.WriteIdRefAsAttribute || !poco.{{Property.WritePropertyName property}}.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.{{Property.WritePropertyName property}}, "{{String.LowerCaseFirstLetter property.Name}}", elementOriginMap, currentFileUri{{#if property.Type.IsAbstract}}, true{{/if}}); + } + {{/if}} + } +{{/if}} diff --git a/SysML2.NET.CodeGenerator/Templates/Uml/core-xmi-reader-facade-template.hbs b/SysML2.NET.CodeGenerator/Templates/Uml/core-xmi-reader-facade-template.hbs index d216e82a8..99097cf76 100644 --- a/SysML2.NET.CodeGenerator/Templates/Uml/core-xmi-reader-facade-template.hbs +++ b/SysML2.NET.CodeGenerator/Templates/Uml/core-xmi-reader-facade-template.hbs @@ -44,38 +44,38 @@ namespace SysML2.NET.Serializer.Xmi.Readers /// A dictionary that contains functions that return based a key that represents the xsi Type /// and a provided , , and /// - private readonly Dictionary> readerCache; + private readonly Dictionary> readerCache; /// /// A dictionary that contains functions that return an awaitable with the based a key that represents the xsi Type /// and a provided , , and /// - private readonly Dictionary>> readerAsyncCache; + private readonly Dictionary>> readerAsyncCache; /// /// Initializes a new instance of the /// public XmiDataReaderFacade() { - this.readerCache = new Dictionary> + this.readerCache = new Dictionary> { {{ #each this as | class | }} - ["sysml:{{ class.Name }}"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:{{ class.Name }}"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var {{ String.LowerCaseFirstLetter class.Name }}Reader = new {{ class.Name }}Reader(cache, this, externalReferenceService, loggerFactory); + var {{ String.LowerCaseFirstLetter class.Name }}Reader = new {{ class.Name }}Reader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return {{ String.LowerCaseFirstLetter class.Name }}Reader.Read(subXmlReader, currentLocation); }, {{/each}} }; - this.readerAsyncCache = new Dictionary>> + this.readerAsyncCache = new Dictionary>> { {{ #each this as | class | }} - ["sysml:{{ class.Name }}"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:{{ class.Name }}"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var {{ String.LowerCaseFirstLetter class.Name }}Reader = new {{ class.Name }}Reader(cache, this, externalReferenceService, loggerFactory); + var {{ String.LowerCaseFirstLetter class.Name }}Reader = new {{ class.Name }}Reader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await {{ String.LowerCaseFirstLetter class.Name }}Reader.ReadAsync(subXmlReader, currentLocation); }, {{/each}} @@ -95,7 +95,7 @@ namespace SysML2.NET.Serializer.Xmi.Readers /// The explicit type name to resolve, in case of un-specified xsi:type /// An instance of the read /// If the xsi:type is not supported - public IData QueryXmiData(XmlReader xmiReader, IXmiDataCache xmiDataCache, Uri currentLocation, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, string explicitTypeName = "") + public IData QueryXmiData(XmlReader xmiReader, IXmiDataCache xmiDataCache, Uri currentLocation, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, string explicitTypeName = "", IXmiElementOriginMap elementOriginMap = null) { AssertValidQueryXmiDataParameters(xmiReader, xmiDataCache, currentLocation); @@ -107,12 +107,12 @@ namespace SysML2.NET.Serializer.Xmi.Readers } xsiType ??= explicitTypeName; - + if (this.readerCache.TryGetValue(xsiType, out var readerFactory)) { - return readerFactory(xmiDataCache, externalReferenceService, loggerFactory, xmiReader, currentLocation); + return readerFactory(xmiDataCache, externalReferenceService, loggerFactory, xmiReader, currentLocation, elementOriginMap); } - + throw new InvalidOperationException($"No reader found for xsi:type - {xsiType}"); } @@ -129,24 +129,24 @@ namespace SysML2.NET.Serializer.Xmi.Readers /// The explicit type name to resolve, in case of un-specified xsi:type /// An awaitable with the instance of the read /// If the xsi:type is not supported - public Task QueryXmiDataAsync(XmlReader xmiReader, IXmiDataCache xmiDataCache, Uri currentLocation, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, string explicitTypeName = "") + public Task QueryXmiDataAsync(XmlReader xmiReader, IXmiDataCache xmiDataCache, Uri currentLocation, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, string explicitTypeName = "", IXmiElementOriginMap elementOriginMap = null) { AssertValidQueryXmiDataParameters(xmiReader, xmiDataCache, currentLocation); - + var xsiType = xmiReader.GetAttribute("xsi:type"); - + if (xsiType == null && string.IsNullOrEmpty(explicitTypeName)) { throw new InvalidOperationException($"The xsi:type is not specified"); } - + xsiType ??= explicitTypeName; - + if (this.readerAsyncCache.TryGetValue(xsiType, out var readerFactory)) { - return readerFactory(xmiDataCache, externalReferenceService, loggerFactory, xmiReader, currentLocation); + return readerFactory(xmiDataCache, externalReferenceService, loggerFactory, xmiReader, currentLocation, elementOriginMap); } - + throw new InvalidOperationException($"No reader found for xsi:type - {xsiType}"); } diff --git a/SysML2.NET.CodeGenerator/Templates/Uml/core-xmi-reader-template.hbs b/SysML2.NET.CodeGenerator/Templates/Uml/core-xmi-reader-template.hbs index 6105b3556..71dbbd576 100644 --- a/SysML2.NET.CodeGenerator/Templates/Uml/core-xmi-reader-template.hbs +++ b/SysML2.NET.CodeGenerator/Templates/Uml/core-xmi-reader-template.hbs @@ -61,7 +61,8 @@ namespace SysML2.NET.Serializer.Xmi.Readers /// /// The injected used to register and process external references /// The injected used to set up logging - public {{this.Name}}Reader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + /// The optional used to track element-to-file associations + public {{this.Name}}Reader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger<{{this.Name}}Reader>.Instance : loggerFactory.CreateLogger<{{this.Name}}Reader>(); } @@ -107,6 +108,8 @@ namespace SysML2.NET.Serializer.Xmi.Readers this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "{{this.Name}}", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + {{#with this as |class| }} {{ #each (Class.QueryAllProperties this) as | property | }} {{#unless this.IsTransient}} @@ -187,6 +190,8 @@ namespace SysML2.NET.Serializer.Xmi.Readers { this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "{{this.Name}}", poco.Id); } + + this.ElementOriginMap?.Register(poco.Id, currentLocation); {{#with this as |class| }} {{ #each (Class.QueryAllProperties this) as | property | }} diff --git a/SysML2.NET.CodeGenerator/Templates/Uml/core-xmi-writer-facade-template.hbs b/SysML2.NET.CodeGenerator/Templates/Uml/core-xmi-writer-facade-template.hbs new file mode 100644 index 000000000..9a54ee49c --- /dev/null +++ b/SysML2.NET.CodeGenerator/Templates/Uml/core-xmi-writer-facade-template.hbs @@ -0,0 +1,293 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Root.Elements; + + /// + /// The purpose of the is to dispatch writing of instances + /// to the appropriate per-type writer class + /// + public class XmiDataWriterFacade : IXmiDataWriterFacade + { + /// + /// The used to set up logging for writer instances + /// + private readonly ILoggerFactory loggerFactory; + + /// + /// A dictionary that contains actions that write based on a key that represents the POCO type name + /// + private readonly Dictionary> writerCache; + + /// + /// A dictionary that contains functions that asynchronously write based on a key that represents the POCO type name + /// + private readonly Dictionary> writerAsyncCache; + + /// + /// Initializes a new instance of the + /// + /// The used to set up logging + public XmiDataWriterFacade(ILoggerFactory loggerFactory) + { + this.loggerFactory = loggerFactory; + + this.writerCache = new Dictionary> + { + {{ #each this as | class | }} + ["{{ class.Name }}"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new {{ class.Name }}Writer(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.{{ #NamedElement.WriteFullyQualifiedNameSpace class }}.I{{ class.Name }})data, elementName, writerOptions, originMap, uri); + }, + {{/each}} + }; + + this.writerAsyncCache = new Dictionary> + { + {{ #each this as | class | }} + ["{{ class.Name }}"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new {{ class.Name }}Writer(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.{{ #NamedElement.WriteFullyQualifiedNameSpace class }}.I{{ class.Name }})data, elementName, writerOptions, originMap, uri); + }, + {{/each}} + }; + } + + /// + /// Writes the specified as an XMI element by dispatching to the appropriate per-type writer + /// + /// The target + /// The to write + /// The XML element name to use + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The of the current output file for relative href computation + public void Write(XmlWriter xmlWriter, IData data, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + var typeName = data.GetType().Name; + + if (this.writerCache.TryGetValue(typeName, out var writer)) + { + writer(xmlWriter, data, elementName, writerOptions, elementOriginMap, currentFileUri); + } + else + { + throw new InvalidOperationException($"No writer found for type {typeName}"); + } + } + + /// + /// Writes a contained child element, checking origin map for cross-file href + /// + /// The target + /// The child to write + /// The XML element name to use + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The of the current output file for relative href computation + /// Asserts that the XSI type should be specified in case of HREF + public void WriteContainedElement(XmlWriter xmlWriter, IData childData, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap, Uri currentFileUri, bool shouldSpecifyType = false) + { + if (!writerOptions.IncludeImplied && childData is IRelationship rel && rel.IsImplied) + { + return; + } + + if (elementOriginMap != null && currentFileUri != null) + { + var childSourceFile = elementOriginMap.GetSourceFile(childData.Id); + + if (childSourceFile != null && childSourceFile != currentFileUri) + { + WriteHrefElement(xmlWriter, childData, elementName, childSourceFile, currentFileUri, shouldSpecifyType); + return; + } + } + + this.Write(xmlWriter, childData, elementName, writerOptions, elementOriginMap, currentFileUri); + } + + /// + /// Writes a reference child element, checking origin map for cross-file href + /// + /// The target + /// The child to write + /// The XML element name to use + /// The optional for href reconstruction + /// The of the current output file for relative href computation + /// Asserts that the XSI type should be specified in case of HREF + public void WriteReferenceElement(XmlWriter xmlWriter, IData childData, string elementName, IXmiElementOriginMap elementOriginMap, Uri currentFileUri, bool shouldSpecifyType = false) + { + if (elementOriginMap != null && currentFileUri != null) + { + var childSourceFile = elementOriginMap.GetSourceFile(childData.Id); + + if (childSourceFile != null && childSourceFile != currentFileUri) + { + WriteHrefElement(xmlWriter, childData, elementName, childSourceFile, currentFileUri, shouldSpecifyType); + return; + } + } + + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xmi", "idref", null, childData.Id.ToString()); + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the specified as an XMI element by dispatching to the appropriate per-type writer + /// + /// The target + /// The to write + /// The XML element name to use + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The of the current output file for relative href computation + public async Task WriteAsync(XmlWriter xmlWriter, IData data, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + var typeName = data.GetType().Name; + + if (this.writerAsyncCache.TryGetValue(typeName, out var writer)) + { + await writer(xmlWriter, data, elementName, writerOptions, elementOriginMap, currentFileUri); + } + else + { + throw new InvalidOperationException($"No writer found for type {typeName}"); + } + } + + /// + /// Asynchronously writes a contained child element, checking origin map for cross-file href + /// + /// The target + /// The child to write + /// The XML element name to use + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The of the current output file for relative href computation + /// Asserts that the XSI type should be specified in case of HREF + public async Task WriteContainedElementAsync(XmlWriter xmlWriter, IData childData, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap, Uri currentFileUri, bool shouldSpecifyType = false) + { + if (!writerOptions.IncludeImplied && childData is IRelationship rel && rel.IsImplied) + { + return; + } + + if (elementOriginMap != null && currentFileUri != null) + { + var childSourceFile = elementOriginMap.GetSourceFile(childData.Id); + + if (childSourceFile != null && childSourceFile != currentFileUri) + { + await WriteHrefElementAsync(xmlWriter, childData, elementName, childSourceFile, currentFileUri, shouldSpecifyType); + return; + } + } + + await this.WriteAsync(xmlWriter, childData, elementName, writerOptions, elementOriginMap, currentFileUri); + } + + /// + /// Asynchronously writes a reference child element, checking origin map for cross-file href + /// + /// The target + /// The child to write + /// The XML element name to use + /// The optional for href reconstruction + /// The of the current output file for relative href computation + /// Asserts that the XSI type should be specified in case of HREF + public async Task WriteReferenceElementAsync(XmlWriter xmlWriter, IData childData, string elementName, IXmiElementOriginMap elementOriginMap, Uri currentFileUri, bool shouldSpecifyType = false) + { + if (elementOriginMap != null && currentFileUri != null) + { + var childSourceFile = elementOriginMap.GetSourceFile(childData.Id); + + if (childSourceFile != null && childSourceFile != currentFileUri) + { + await WriteHrefElementAsync(xmlWriter, childData, elementName, childSourceFile, currentFileUri, shouldSpecifyType); + return; + } + } + + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xmi", "idref", null, childData.Id.ToString()); + await xmlWriter.WriteEndElementAsync(); + } + + /// + /// Writes an href element for cross-file references + /// + private static void WriteHrefElement(XmlWriter xmlWriter, IData childData, string elementName, Uri targetFile, Uri currentFile, bool shouldSpecifyType) + { + var relativePath = currentFile.MakeRelativeUri(targetFile); + var href = $"{Uri.UnescapeDataString(relativePath.ToString())}#{childData.Id}"; + + xmlWriter.WriteStartElement(elementName); + + if(shouldSpecifyType) + { + xmlWriter.WriteAttributeString("xsi", "type", null, $"sysml:{childData.GetType().Name}"); + } + + xmlWriter.WriteAttributeString("href", href); + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes an href element for cross-file references + /// + private static async Task WriteHrefElementAsync(XmlWriter xmlWriter, IData childData, string elementName, Uri targetFile, Uri currentFile, bool shouldSpecifyType) + { + var relativePath = currentFile.MakeRelativeUri(targetFile); + var href = $"{Uri.UnescapeDataString(relativePath.ToString())}#{childData.Id}"; + + await xmlWriter.WriteStartElementAsync(null, elementName, null); + + if(shouldSpecifyType) + { + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, $"sysml:{childData.GetType().Name}"); + } + + await xmlWriter.WriteAttributeStringAsync(null, "href", null, href); + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.CodeGenerator/Templates/Uml/core-xmi-writer-template.hbs b/SysML2.NET.CodeGenerator/Templates/Uml/core-xmi-writer-template.hbs new file mode 100644 index 000000000..0bc18d3ac --- /dev/null +++ b/SysML2.NET.CodeGenerator/Templates/Uml/core-xmi-writer-template.hbs @@ -0,0 +1,199 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + {{ #Class.WriteEnumerationNameSpaces this}} + {{ #Class.WriteNameSpaces this POCO}} + using SysML2.NET.Core.POCO.{{ #NamedElement.WriteFullyQualifiedNameSpace this }}; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class {{this.Name}}Writer : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger<{{this.Name}}Writer> logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public {{this.Name}}Writer(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger<{{this.Name}}Writer>.Instance : loggerFactory.CreateLogger<{{this.Name}}Writer>(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, I{{this.Name}} poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:{{this.Name}}"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + {{#with this as |class| }} + {{ #each (Class.QueryAllPropertiesSorted this) as | property | }} + {{#unless this.IsTransient}} + {{#unless (Property.QueryIsEnumerableAndReferenceProperty this)}} + {{#unless (Property.IsPropertyRedefinedInClass this class)}} + {{#unless property.Opposite.IsComposite}} + {{#if this.IsDerived}} + if(writerOptions.IncludeDerivedProperties) + { + {{> core-xmi-writer-partial-for-attribute-template this}} + } + {{else}} + {{> core-xmi-writer-partial-for-attribute-template this}} + {{/if}} + + {{/unless}} + {{/unless}} + {{/unless}} + {{/unless}} + {{/each}} + {{/with}} + + // Reference/containment properties as child elements (sorted alphabetically) + {{#with this as |class| }} + {{ #each (Class.QueryAllPropertiesSorted this) as | property | }} + {{#unless this.IsTransient}} + {{#if (Property.QueryIsReferenceProperty this)}} + {{#unless (Property.IsPropertyRedefinedInClass this class)}} + {{#unless property.Opposite.IsComposite}} + {{#if this.IsDerived}} + if(writerOptions.IncludeDerivedProperties) + { + {{> core-xmi-writer-partial-for-element-template this}} + } + {{else}} + {{> core-xmi-writer-partial-for-element-template this}} + {{/if}} + + {{/unless}} + {{/unless}} + {{/if}} + {{/unless}} + {{/each}} + {{/with}} + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, I{{this.Name}} poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:{{this.Name}}"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + {{#with this as |class| }} + {{ #each (Class.QueryAllPropertiesSorted this) as | property | }} + {{#unless this.IsTransient}} + {{#unless (Property.QueryIsEnumerableAndReferenceProperty this)}} + {{#unless (Property.IsPropertyRedefinedInClass this class)}} + {{#unless property.Opposite.IsComposite}} + {{#if this.IsDerived}} + if(writerOptions.IncludeDerivedProperties) + { + {{> core-xmi-writer-partial-for-attribute-async-template this}} + } + {{else}} + {{> core-xmi-writer-partial-for-attribute-async-template this}} + {{/if}} + + {{/unless}} + {{/unless}} + {{/unless}} + {{/unless}} + {{/each}} + {{/with}} + + // Reference/containment properties as child elements (sorted alphabetically) + {{#with this as |class| }} + {{ #each (Class.QueryAllPropertiesSorted this) as | property | }} + {{#unless this.IsTransient}} + {{#if (Property.QueryIsReferenceProperty this)}} + {{#unless property.Opposite.IsComposite}} + {{#unless (Property.IsPropertyRedefinedInClass this class)}} + {{#if this.IsDerived}} + if(writerOptions.IncludeDerivedProperties) + { + {{> core-xmi-writer-partial-for-element-async-template this}} + } + {{else}} + {{> core-xmi-writer-partial-for-element-async-template this}} + {{/if}} + + {{/unless}} + {{/unless}} + {{/if}} + {{/unless}} + {{/each}} + {{/with}} + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi.Tests/RoundTripTestFixture.cs b/SysML2.NET.Serializer.Xmi.Tests/RoundTripTestFixture.cs new file mode 100644 index 000000000..79af6e56c --- /dev/null +++ b/SysML2.NET.Serializer.Xmi.Tests/RoundTripTestFixture.cs @@ -0,0 +1,268 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Tests +{ + using System; + using System.IO; + using System.Linq; + using System.Xml; + + using Microsoft.Extensions.DependencyInjection; + using Microsoft.Extensions.Logging; + + using Org.XmlUnit.Builder; + using Org.XmlUnit.Diff; + + using SysML2.NET.Serializer.Xmi.Extensions; + using SysML2.NET.Serializer.Xmi.Readers; + using SysML2.NET.Serializer.Xmi.Writers; + + [TestFixture] + public class RoundTripTestFixture + { + private ILoggerFactory loggerFactory; + private XmiWriterOptions writerOptions = new(); + + [SetUp] + public void Setup() + { + var serviceProvider = new ServiceCollection() + .AddLogging(x => x.AddConsole()) + .BuildServiceProvider(); + + this.loggerFactory = serviceProvider.GetRequiredService(); + } + + [Test] + public void Verify_that_deserialization_with_origin_map_tracks_elements() + { + var xmiDataCache = new XmiDataCache(new PocoReferenceResolveExtensionsFacade(), this.loggerFactory.CreateLogger()); + + var deSerializer = new DeSerializer( + new ExternalReferenceService(this.loggerFactory.CreateLogger()), + new XmiDataReaderFacade(), + xmiDataCache, + this.loggerFactory); + + var originMap = new XmiElementOriginMap(); + + var filePath = Path.Combine(TestContext.CurrentContext.TestDirectory, "Resources", "Domain Libraries", "Quantities and Units", "Quantities.sysmlx"); + var fileUri = new Uri(filePath); + + var rootNamespace = deSerializer.DeSerialize(fileUri, originMap); + + Assert.That(rootNamespace, Is.Not.Null); + + // Verify that elements were tracked + var allSourceFiles = originMap.GetAllSourceFiles().ToList(); + Assert.That(allSourceFiles, Is.Not.Empty); + + // Verify that the root namespace was registered + var rootNsId = originMap.GetRootNamespaceId(fileUri); + Assert.That(rootNsId, Is.EqualTo(rootNamespace.Id)); + + // Verify that elements in the file can be queried + var elementsInFile = originMap.GetElementsInFile(fileUri).ToList(); + Assert.That(elementsInFile, Is.Not.Empty); + Assert.That(elementsInFile, Does.Contain(rootNamespace.Id)); + } + + [Test] + public void Verify_that_serialized_output_is_well_formed_xml_with_correct_root() + { + // Step 1: Deserialize original + var xmiDataCache1 = new XmiDataCache(new PocoReferenceResolveExtensionsFacade(), this.loggerFactory.CreateLogger()); + + var deSerializer1 = new DeSerializer( + new ExternalReferenceService(this.loggerFactory.CreateLogger()), + new XmiDataReaderFacade(), + xmiDataCache1, + this.loggerFactory); + + var filePath = Path.Combine(TestContext.CurrentContext.TestDirectory, "Resources", "Domain Libraries", "Quantities and Units", "Quantities.sysmlx"); + var originalNamespace = deSerializer1.DeSerialize(new Uri(filePath)); + + Assert.That(originalNamespace, Is.Not.Null); + + // Step 2: Serialize to stream + var serializer = new Serializer(this.loggerFactory); + var memoryStream = new MemoryStream(); + + serializer.Serialize(originalNamespace, this.writerOptions, memoryStream); + + Assert.That(memoryStream.Length, Is.GreaterThan(0)); + + // Step 3: Verify the output is well-formed XML with correct structure + memoryStream.Seek(0, SeekOrigin.Begin); + + var xmlDoc = new System.Xml.XmlDocument(); + Assert.That(() => xmlDoc.Load(memoryStream), Throws.Nothing, "Output should be well-formed XML"); + + var rootElement = xmlDoc.DocumentElement; + Assert.That(rootElement, Is.Not.Null); + Assert.That(rootElement.LocalName, Is.EqualTo("Namespace")); + Assert.That(rootElement.GetAttribute("id", "http://www.omg.org/spec/XMI/20131001"), Is.EqualTo(originalNamespace.Id.ToString())); + + // Verify there are child elements (ownedRelationship) + var childElements = rootElement.ChildNodes.Cast().Where(n => n.NodeType == System.Xml.XmlNodeType.Element).ToList(); + Assert.That(childElements, Is.Not.Empty, "Should have child elements"); + } + + [Test] + public void Verify_that_origin_map_captures_multi_file_references() + { + var xmiDataCache = new XmiDataCache(new PocoReferenceResolveExtensionsFacade(), this.loggerFactory.CreateLogger()); + + var deSerializer = new DeSerializer( + new ExternalReferenceService(this.loggerFactory.CreateLogger()), + new XmiDataReaderFacade(), + xmiDataCache, + this.loggerFactory); + + var originMap = new XmiElementOriginMap(); + + // Quantities.sysmlx references other files like ScalarValues.kermlx, ISQBase.sysmlx, etc. + var filePath = Path.Combine(TestContext.CurrentContext.TestDirectory, "Resources", "Domain Libraries", "Quantities and Units", "Quantities.sysmlx"); + var fileUri = new Uri(filePath); + + deSerializer.DeSerialize(fileUri, originMap); + + var allSourceFiles = originMap.GetAllSourceFiles().ToList(); + + // Should have multiple source files since Quantities.sysmlx has external references + Assert.That(allSourceFiles.Count, Is.GreaterThan(1)); + + // Each source file should have a root namespace registered + foreach (var sourceFile in allSourceFiles) + { + var rootNsId = originMap.GetRootNamespaceId(sourceFile); + Assert.That(rootNsId, Is.Not.EqualTo(Guid.Empty), $"Root namespace not registered for {sourceFile}"); + } + } + + [Test] + public void VerifySerializedXmlCorrespondToOriginalFile() + { + var xmiDataCache = new XmiDataCache(new PocoReferenceResolveExtensionsFacade(), this.loggerFactory.CreateLogger()); + + var deSerializer = new DeSerializer( + new ExternalReferenceService(this.loggerFactory.CreateLogger()), + new XmiDataReaderFacade(), + xmiDataCache, + this.loggerFactory); + + var originMap = new XmiElementOriginMap(); + + // Quantities.sysmlx references other files like ScalarValues.kermlx, ISQBase.sysmlx, etc. + var filePath = Path.Combine(TestContext.CurrentContext.TestDirectory, "Resources", "Domain Libraries", "Quantities and Units", "Quantities.sysmlx"); + var fileUri = new Uri(filePath); + + var quantityNamespace = deSerializer.DeSerialize(fileUri, originMap); + + var serializer = new Serializer(this.loggerFactory); + var outputFile = Path.Combine(TestContext.CurrentContext.TestDirectory, "SerializedQuantities.sysmlx"); + + var fileStream = new FileStream(outputFile, FileMode.Create); + + serializer.Serialize(quantityNamespace, this.writerOptions, fileStream, originMap, new Uri(filePath)); + fileStream.Close(); + + var content = File.ReadAllText(outputFile); + + var xmlDiff = DiffBuilder.Compare(Input.FromFile(filePath)) + .WithTest(Input.FromString(content.Replace("http://www.omg.org/spec/XMI/20131001", "http://www.omg.org/XMI"))) + .IgnoreWhitespace() + .IgnoreComments() + .WithAttributeFilter(attr => attr.LocalName != "version") + .WithDifferenceEvaluator((comparison, outcome) => + { + switch (comparison.Type) + { + case ComparisonType.XML_ENCODING: + case ComparisonType.XML_VERSION: + return ComparisonResult.EQUAL; + case ComparisonType.ATTR_VALUE: + { + var control = comparison.ControlDetails.Value?.ToString()?.Replace("%20", " "); + var test = comparison.TestDetails.Value?.ToString()?.Replace("%20", " "); + + if (control == test) + { + return ComparisonResult.EQUAL; + } + + break; + } + + case ComparisonType.ATTR_NAME_LOOKUP: + { + if (outcome != ComparisonResult.EQUAL && comparison.ControlDetails.Target is XmlElement controlElement) + { + var testElement = (XmlElement)comparison.TestDetails.Target; + + if (controlElement.HasAttribute("isComposite") && !testElement.HasAttribute("isComposite")) + { + return controlElement.GetAttribute("isComposite") == "false" ? ComparisonResult.EQUAL : ComparisonResult.DIFFERENT; + } + + if (controlElement.HasAttribute("declaredName") && !testElement.HasAttribute("declaredName")) + { + return controlElement.GetAttribute("declaredName") == "" ? ComparisonResult.EQUAL : ComparisonResult.DIFFERENT; + } + } + + break; + } + + case ComparisonType.ELEMENT_NUM_ATTRIBUTES: + { + var controlCount = Convert.ToInt32(comparison.ControlDetails.Value); + var testCount = Convert.ToInt32(comparison.TestDetails.Value); + + if (Math.Abs(controlCount - testCount) == 1) + { + var controlElement =(XmlElement)comparison.ControlDetails.Target; + var testElement = (XmlElement)comparison.TestDetails.Target; + + if (controlElement.HasAttribute("isComposite") && !testElement.HasAttribute("isComposite")) + { + return controlElement.GetAttribute("isComposite") == "false" ? ComparisonResult.EQUAL : ComparisonResult.DIFFERENT; + } + + if (controlElement.HasAttribute("declaredName") && !testElement.HasAttribute("declaredName")) + { + return controlElement.GetAttribute("declaredName") == "" ? ComparisonResult.EQUAL : ComparisonResult.DIFFERENT; + } + } + + break; + } + } + + return outcome; + }) + .CheckForIdentical() + .Build(); + + Assert.That(xmlDiff.HasDifferences, Is.False); + } + } +} diff --git a/SysML2.NET.Serializer.Xmi.Tests/SerializerTestFixture.cs b/SysML2.NET.Serializer.Xmi.Tests/SerializerTestFixture.cs new file mode 100644 index 000000000..31f81f460 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi.Tests/SerializerTestFixture.cs @@ -0,0 +1,159 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Tests +{ + using System; + using System.IO; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + + using Core.POCO.Root.Elements; + using Core.POCO.Root.Namespaces; + + using Microsoft.Extensions.DependencyInjection; + using Microsoft.Extensions.Logging; + + using SysML2.NET.Serializer.Xmi.Extensions; + using SysML2.NET.Serializer.Xmi.Readers; + using SysML2.NET.Serializer.Xmi.Writers; + + [TestFixture] + public class SerializerTestFixture + { + private Serializer serializer; + private DeSerializer deSerializer; + private XmiDataCache xmiDataCache; + + private INamespace anonymouseNameSpace; + private XmiWriterOptions writerOptions = new(); + + [SetUp] + public void Setup() + { + var serviceProvider = new ServiceCollection() + .AddLogging(x => x.AddConsole()) + .BuildServiceProvider(); + + this.xmiDataCache = new XmiDataCache(new PocoReferenceResolveExtensionsFacade(), serviceProvider.GetRequiredService>()); + + this.deSerializer = new DeSerializer(new ExternalReferenceService(serviceProvider.GetRequiredService>()), new XmiDataReaderFacade(), this.xmiDataCache, serviceProvider.GetRequiredService()); + + this.ReadAndAssemblePopulationFromXmiFile(); + + this.serializer = new Serializer(serviceProvider.GetRequiredService()); + } + + [Test] + public void Verify_that_the_name_space_can_be_serialized_to_xmi() + { + var targetStream = new MemoryStream(); + + Assert.That(() => this.serializer.Serialize(this.anonymouseNameSpace, this.writerOptions, targetStream), Throws.Nothing); + + Assert.That(targetStream.Length, Is.GreaterThan(0)); + } + + [Test] + public void Verify_that_serialized_xmi_contains_expected_structure() + { + var targetStream = new MemoryStream(); + + this.serializer.Serialize(this.anonymouseNameSpace, this.writerOptions, targetStream); + + targetStream.Seek(0, SeekOrigin.Begin); + var reader = new StreamReader(targetStream); + var content = reader.ReadToEnd(); + + Assert.That(content, Does.Contain("sysml:Namespace")); + Assert.That(content, Does.Contain("xmi:id=")); + Assert.That(content, Does.Contain("xmlns:xmi")); + Assert.That(content, Does.Contain("xmlns:xsi")); + } + + [Test] + public async Task Verify_that_the_name_space_can_be_serialized_to_xmi_async() + { + var targetStream = new MemoryStream(); + + await this.serializer.SerializeAsync(this.anonymouseNameSpace, this.writerOptions, targetStream, CancellationToken.None); + + Assert.That(targetStream.Length, Is.GreaterThan(0)); + } + + [Test] + public void Verify_that_includesImplied_false_excludes_implied_relationships() + { + var impliedRelationship = this.anonymouseNameSpace.OwnedRelationship.FirstOrDefault(); + Assert.That(impliedRelationship, Is.Not.Null, "Need at least one relationship to test"); + + impliedRelationship.IsImplied = true; + var impliedId = impliedRelationship.Id.ToString(); + + var targetStream = new MemoryStream(); + this.serializer.Serialize(this.anonymouseNameSpace, this.writerOptions, targetStream); + + targetStream.Seek(0, SeekOrigin.Begin); + var content = new StreamReader(targetStream).ReadToEnd(); + + Assert.That(content, Does.Not.Contain(impliedId), "Implied relationship should be excluded when includesImplied=false"); + Assert.That(content, Does.Not.Contain("isImpliedIncluded=\"true\""), "No element should have isImpliedIncluded=true when includesImplied=false"); + } + + [Test] + public void Verify_that_includesImplied_true_includes_implied_and_sets_isImpliedIncluded() + { + var impliedRelationship = this.anonymouseNameSpace.OwnedRelationship.FirstOrDefault(); + Assert.That(impliedRelationship, Is.Not.Null, "Need at least one relationship to test"); + + impliedRelationship.IsImplied = true; + impliedRelationship.IsImpliedIncluded = false; + + var targetStream = new MemoryStream(); + this.serializer.Serialize(this.anonymouseNameSpace, new XmiWriterOptions(){IncludeImplied = true}, targetStream); + + targetStream.Seek(0, SeekOrigin.Begin); + var content = new StreamReader(targetStream).ReadToEnd(); + + Assert.That(content, Does.Contain("isImpliedIncluded=\"true\""), "All elements should have isImpliedIncluded=true when includesImplied=true"); + } + + [Test] + public void Verify_that_includesImplied_false_uses_per_element_isImpliedIncluded() + { + this.anonymouseNameSpace.IsImpliedIncluded = true; + + var targetStream = new MemoryStream(); + this.serializer.Serialize(this.anonymouseNameSpace, this.writerOptions, targetStream); + + targetStream.Seek(0, SeekOrigin.Begin); + var content = new StreamReader(targetStream).ReadToEnd(); + + Assert.That(content, Does.Contain("isImpliedIncluded=\"true\""), "Root namespace with IsImpliedIncluded=true should appear in output"); + } + + private void ReadAndAssemblePopulationFromXmiFile() + { + var filePath = Path.Combine(TestContext.CurrentContext.TestDirectory, "Resources", "Domain Libraries", "Quantities and Units", "Quantities.sysmlx"); + this.anonymouseNameSpace = this.deSerializer.DeSerialize(new Uri(filePath)); + } + } +} diff --git a/SysML2.NET.Serializer.Xmi.Tests/SysML2.NET.Serializer.Xmi.Tests.csproj b/SysML2.NET.Serializer.Xmi.Tests/SysML2.NET.Serializer.Xmi.Tests.csproj index 0cbcab687..0fcda5077 100644 --- a/SysML2.NET.Serializer.Xmi.Tests/SysML2.NET.Serializer.Xmi.Tests.csproj +++ b/SysML2.NET.Serializer.Xmi.Tests/SysML2.NET.Serializer.Xmi.Tests.csproj @@ -32,6 +32,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/SysML2.NET.Serializer.Xmi.Tests/XmiElementOriginMapTestFixture.cs b/SysML2.NET.Serializer.Xmi.Tests/XmiElementOriginMapTestFixture.cs new file mode 100644 index 000000000..c56691569 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi.Tests/XmiElementOriginMapTestFixture.cs @@ -0,0 +1,126 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Tests +{ + using System; + using System.Linq; + + [TestFixture] + public class XmiElementOriginMapTestFixture + { + private XmiElementOriginMap originMap; + + [SetUp] + public void Setup() + { + this.originMap = new XmiElementOriginMap(); + } + + [Test] + public void Verify_that_element_can_be_registered_and_retrieved() + { + var elementId = Guid.NewGuid(); + var sourceFile = new Uri("file:///C:/test/model.sysmlx"); + + this.originMap.Register(elementId, sourceFile); + + Assert.That(this.originMap.GetSourceFile(elementId), Is.EqualTo(sourceFile)); + } + + [Test] + public void Verify_that_GetSourceFile_returns_null_for_unregistered_element() + { + var elementId = Guid.NewGuid(); + + Assert.That(this.originMap.GetSourceFile(elementId), Is.Null); + } + + [Test] + public void Verify_that_GetElementsInFile_returns_correct_elements() + { + var sourceFile = new Uri("file:///C:/test/model.sysmlx"); + var element1 = Guid.NewGuid(); + var element2 = Guid.NewGuid(); + var element3 = Guid.NewGuid(); + var otherFile = new Uri("file:///C:/test/other.sysmlx"); + + this.originMap.Register(element1, sourceFile); + this.originMap.Register(element2, sourceFile); + this.originMap.Register(element3, otherFile); + + var elementsInFile = this.originMap.GetElementsInFile(sourceFile).ToList(); + + Assert.That(elementsInFile, Has.Count.EqualTo(2)); + Assert.That(elementsInFile, Does.Contain(element1)); + Assert.That(elementsInFile, Does.Contain(element2)); + Assert.That(elementsInFile, Does.Not.Contain(element3)); + } + + [Test] + public void Verify_that_GetAllSourceFiles_returns_distinct_files() + { + var file1 = new Uri("file:///C:/test/model1.sysmlx"); + var file2 = new Uri("file:///C:/test/model2.sysmlx"); + + this.originMap.Register(Guid.NewGuid(), file1); + this.originMap.Register(Guid.NewGuid(), file1); + this.originMap.Register(Guid.NewGuid(), file2); + + var allFiles = this.originMap.GetAllSourceFiles().ToList(); + + Assert.That(allFiles, Has.Count.EqualTo(2)); + Assert.That(allFiles, Does.Contain(file1)); + Assert.That(allFiles, Does.Contain(file2)); + } + + [Test] + public void Verify_that_root_namespace_can_be_registered_and_retrieved() + { + var sourceFile = new Uri("file:///C:/test/model.sysmlx"); + var rootNamespaceId = Guid.NewGuid(); + + this.originMap.RegisterRootNamespace(sourceFile, rootNamespaceId); + + Assert.That(this.originMap.GetRootNamespaceId(sourceFile), Is.EqualTo(rootNamespaceId)); + } + + [Test] + public void Verify_that_GetRootNamespaceId_returns_empty_guid_for_unregistered_file() + { + var sourceFile = new Uri("file:///C:/test/model.sysmlx"); + + Assert.That(this.originMap.GetRootNamespaceId(sourceFile), Is.EqualTo(Guid.Empty)); + } + + [Test] + public void Verify_that_registering_same_element_overwrites_source_file() + { + var elementId = Guid.NewGuid(); + var file1 = new Uri("file:///C:/test/model1.sysmlx"); + var file2 = new Uri("file:///C:/test/model2.sysmlx"); + + this.originMap.Register(elementId, file1); + this.originMap.Register(elementId, file2); + + Assert.That(this.originMap.GetSourceFile(elementId), Is.EqualTo(file2)); + } + } +} diff --git a/SysML2.NET.Serializer.Xmi/DeSerializer.cs b/SysML2.NET.Serializer.Xmi/DeSerializer.cs index b97c584ed..1b6002e0f 100644 --- a/SysML2.NET.Serializer.Xmi/DeSerializer.cs +++ b/SysML2.NET.Serializer.Xmi/DeSerializer.cs @@ -1,20 +1,20 @@ -// ------------------------------------------------------------------------------------------------- +// ------------------------------------------------------------------------------------------------- // -// +// // Copyright 2022-2026 Starion Group S.A. -// +// // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -// +// // // ------------------------------------------------------------------------------------------------ @@ -66,6 +66,11 @@ public class DeSerializer : IDeSerializer /// private readonly IXmiDataReaderFacade xmiDataReaderFacade; + /// + /// The optional used to track element-to-file associations during deserialization + /// + private IXmiElementOriginMap elementOriginMap; + /// Initializes a new instance of the class. /// The injected providing external reference file resolve /// @@ -99,6 +104,31 @@ public INamespace DeSerialize(Uri fileLocation) return this.DeSerialize(fileLocation, true); } + /// + /// Deserializes the XMI file to a read , tracking element origins + /// + /// + /// the that locates the XMI file + /// + /// + /// The to populate with element-to-file associations + /// + /// If the or is null + /// If the does not locate an existing file + /// + /// The read + /// + public INamespace DeSerialize(Uri fileLocation, IXmiElementOriginMap elementOriginMap) + { + if (elementOriginMap == null) + { + throw new ArgumentNullException(nameof(elementOriginMap)); + } + + this.elementOriginMap = elementOriginMap; + return this.DeSerialize(fileLocation, true); + } + /// /// Deserializes asynchronously the XMI file to a read /// @@ -116,6 +146,32 @@ public Task DeSerializeAsync(Uri fileLocation, CancellationToken can return this.DeSerializeAsync(fileLocation, true, cancellationToken); } + /// + /// Deserializes asynchronously the XMI file to a read , tracking element origins + /// + /// + /// the that locates the XMI file + /// + /// + /// The to populate with element-to-file associations + /// + /// An optional to cancel the read process + /// If the or is null + /// If the does not locate an existing file + /// + /// An awaitable with the read + /// + public Task DeSerializeAsync(Uri fileLocation, IXmiElementOriginMap elementOriginMap, CancellationToken cancellationToken = default) + { + if (elementOriginMap == null) + { + throw new ArgumentNullException(nameof(elementOriginMap)); + } + + this.elementOriginMap = elementOriginMap; + return this.DeSerializeAsync(fileLocation, true, cancellationToken); + } + /// /// Deserializes asynchronously the XMI file to a read /// @@ -195,7 +251,10 @@ private async Task ReadAsync(Stream stream, Uri fileLocation, bool i return existingNamespace; } - var readNamespace = (INamespace)await this.xmiDataReaderFacade.QueryXmiDataAsync(xmlReader, this.cache, fileLocation, this.externalReferenceService, this.loggerFactory, xmlReader.Name); + var readNamespace = (INamespace)await this.xmiDataReaderFacade.QueryXmiDataAsync(xmlReader, this.cache, fileLocation, this.externalReferenceService, this.loggerFactory, xmlReader.Name, this.elementOriginMap); + + this.elementOriginMap?.RegisterRootNamespace(fileLocation, readNamespace.Id); + stopWatch.Stop(); this.logger.LogTrace("finished to read xml {DocumentName} in {ElapsedMilliseconds}[ms]", fileInfo.Name, stopWatch.ElapsedMilliseconds); @@ -274,7 +333,10 @@ private INamespace Read(Stream stream, Uri fileLocation, bool isRoot) return existingNamespace; } - var readNamespace = (INamespace)this.xmiDataReaderFacade.QueryXmiData(xmlReader, this.cache, fileLocation, this.externalReferenceService, this.loggerFactory, xmlReader.Name); + var readNamespace = (INamespace)this.xmiDataReaderFacade.QueryXmiData(xmlReader, this.cache, fileLocation, this.externalReferenceService, this.loggerFactory, xmlReader.Name, this.elementOriginMap); + + this.elementOriginMap?.RegisterRootNamespace(fileLocation, readNamespace.Id); + stopWatch.Stop(); this.logger.LogTrace("finished to read xml {DocumentName} in {ElapsedMilliseconds}[ms]", fileInfo.Name, stopWatch.ElapsedMilliseconds); diff --git a/SysML2.NET.Serializer.Xmi/Extensions/DataExtension.cs b/SysML2.NET.Serializer.Xmi/Extensions/DataExtension.cs new file mode 100644 index 000000000..2d54a604e --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Extensions/DataExtension.cs @@ -0,0 +1,55 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Extensions +{ + using System; + + using SysML2.NET.Common; + + /// + /// Extension class for the interface + /// + public static class DataExtension + { + /// + /// Verify that the current can be target via an Id reference or not + /// + /// The that needs to be verified + /// The provided that should be used to verify the registration of the + /// The that locates an XMI file + /// true if the can be referenced via identifier, false otherwise + public static bool QueryIsValidIdRef(this IData data, IXmiElementOriginMap elementOriginMap, Uri currentFileUri) + { + if (data == null) + { + throw new NullReferenceException(nameof(data)); + } + + if (elementOriginMap == null || currentFileUri == null) + { + return true; + } + + var sourceFile = elementOriginMap.GetSourceFile(data.Id); + return sourceFile == null || sourceFile == currentFileUri; + } + } +} diff --git a/SysML2.NET.Serializer.Xmi/IDeSerializer.cs b/SysML2.NET.Serializer.Xmi/IDeSerializer.cs index b586a02c6..b8e6a5a3e 100644 --- a/SysML2.NET.Serializer.Xmi/IDeSerializer.cs +++ b/SysML2.NET.Serializer.Xmi/IDeSerializer.cs @@ -48,6 +48,22 @@ public interface IDeSerializer /// INamespace DeSerialize(Uri fileLocation); + /// + /// Deserializes the XMI file to a read , tracking element origins + /// + /// + /// the that locates the XMI file + /// + /// + /// The to populate with element-to-file associations + /// + /// If the or is null + /// If the does not locate an existing file + /// + /// The read + /// + INamespace DeSerialize(Uri fileLocation, IXmiElementOriginMap elementOriginMap); + /// /// Deserializes asynchronously the XMI file to a read /// @@ -61,5 +77,22 @@ public interface IDeSerializer /// An awaitable with the read /// Task DeSerializeAsync(Uri fileLocation, CancellationToken cancellationToken = default); + + /// + /// Deserializes asynchronously the XMI file to a read , tracking element origins + /// + /// + /// the that locates the XMI file + /// + /// + /// The to populate with element-to-file associations + /// + /// An optional to cancel the read process + /// If the or is null + /// If the does not locate an existing file + /// + /// An awaitable with the read + /// + Task DeSerializeAsync(Uri fileLocation, IXmiElementOriginMap elementOriginMap, CancellationToken cancellationToken = default); } } diff --git a/SysML2.NET.Serializer.Xmi/ISerializer.cs b/SysML2.NET.Serializer.Xmi/ISerializer.cs index 1ea7c6ce9..bf8cb9861 100644 --- a/SysML2.NET.Serializer.Xmi/ISerializer.cs +++ b/SysML2.NET.Serializer.Xmi/ISerializer.cs @@ -1,98 +1,94 @@ // ------------------------------------------------------------------------------------------------- // -// +// // Copyright 2022-2026 Starion Group S.A. -// +// // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -// +// // // ------------------------------------------------------------------------------------------------ namespace SysML2.NET.Serializer.Xmi { + using System; using System.Collections.Generic; using System.IO; using System.Threading; using System.Threading.Tasks; using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Serializer.Xmi.Writers; /// - /// The purpose of the is to write an and + /// The purpose of the is to write an /// as XMI to a /// public interface ISerializer { /// - /// Serialize an as XMI to a target + /// Serialize an as XMI to a target /// - /// - /// The that shall be serialized - /// - /// - /// Asserts that derived properties should also be part of the serialization + /// + /// The that shall be serialized /// + /// The instance that provides writer output configuration /// /// The target /// - void Serialize(IEnumerable dataItems, bool includeDerivedProperties, Stream stream); + void Serialize(INamespace @namespace, XmiWriterOptions writerOptions, Stream stream); /// - /// Serialize an as XMI to a target + /// Serialize an as XMI to a target , + /// using an origin map for href reconstruction /// - /// - /// The that shall be serialized - /// - /// - /// Asserts that derived properties should also be part of the serialization + /// + /// The that shall be serialized /// + /// The instance that provides writer output configuration /// /// The target /// - void Serialize(IData dataItem, bool includeDerivedProperties, Stream stream); + /// + /// The optional for href reconstruction + /// + /// + /// The optional of the current output file for relative href computation + /// + void Serialize(INamespace @namespace, XmiWriterOptions writerOptions, Stream stream, IXmiElementOriginMap elementOriginMap, Uri currentFileUri); /// - /// Asynchronously serialize an as XMI to a target + /// Asynchronously serialize an as XMI to a target /// - /// - /// The that shall be serialized + /// + /// The that shall be serialized /// /// /// The target /// - /// - /// Asserts that derived properties should also be part of the serialization - /// + /// The instance that provides writer output configuration /// /// The used to cancel the operation /// - Task SerializeAsync(IEnumerable dataItems, bool includeDerivedProperties, Stream stream, CancellationToken cancellationToken); + Task SerializeAsync(INamespace @namespace, XmiWriterOptions writerOptions, Stream stream, CancellationToken cancellationToken); /// - /// Asynchronously serialize an as XMI to a target + /// Serialize an to multiple XMI files based on the element origin map /// - /// - /// The that shall be serialized - /// - /// - /// Asserts that derived properties should also be part of the serialization - /// - /// - /// The target - /// - /// - /// The used to cancel the operation - /// - Task SerializeAsync(IData dataItem, bool includeDerivedProperties, Stream stream, CancellationToken cancellationToken); + /// The root containing all elements + /// The tracking element-to-file associations + /// The target directory for output files + /// The instance that provides writer output configuration + void Serialize(INamespace rootNamespace, IXmiElementOriginMap elementOriginMap, DirectoryInfo outputDirectory, XmiWriterOptions writerOptions); } } diff --git a/SysML2.NET.Serializer.Xmi/IXmiElementOriginMap.cs b/SysML2.NET.Serializer.Xmi/IXmiElementOriginMap.cs new file mode 100644 index 000000000..343f1192f --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/IXmiElementOriginMap.cs @@ -0,0 +1,73 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi +{ + using System; + using System.Collections.Generic; + + /// + /// Tracks the association between elements and the XMI source files they were deserialized from. + /// This enables faithful round-trip serialization back to multiple XMI files with correct href references. + /// + public interface IXmiElementOriginMap + { + /// + /// Registers the source file for a given element + /// + /// The identifier of the element + /// The of the source XMI file + void Register(Guid elementId, Uri sourceFile); + + /// + /// Gets the source file for a given element + /// + /// The identifier of the element + /// The of the source file, or null if not tracked + Uri GetSourceFile(Guid elementId); + + /// + /// Gets all element identifiers that were deserialized from the given source file + /// + /// The of the source XMI file + /// An of element identifiers + IEnumerable GetElementsInFile(Uri sourceFile); + + /// + /// Gets all source files that have been registered + /// + /// An of source file URIs + IEnumerable GetAllSourceFiles(); + + /// + /// Registers the root namespace identifier for a given source file + /// + /// The of the source XMI file + /// The of the root namespace element + void RegisterRootNamespace(Uri sourceFile, Guid rootNamespaceId); + + /// + /// Gets the root namespace identifier for a given source file + /// + /// The of the source XMI file + /// The of the root namespace, or if not registered + Guid GetRootNamespaceId(Uri sourceFile); + } +} diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AcceptActionUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AcceptActionUsageReader.cs index 3511bd613..83f09fbd9 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AcceptActionUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AcceptActionUsageReader.cs @@ -90,7 +90,7 @@ public class AcceptActionUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public AcceptActionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public AcceptActionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -136,6 +136,8 @@ public override IAcceptActionUsage Read(XmlReader xmiReader, Uri currentLocation this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AcceptActionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -560,7 +562,7 @@ public override IAcceptActionUsage Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -581,7 +583,7 @@ public override IAcceptActionUsage Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -650,6 +652,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AcceptActionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1074,7 +1078,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1095,7 +1099,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ActionDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ActionDefinitionReader.cs index 75d1da08a..72d9c0043 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ActionDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ActionDefinitionReader.cs @@ -86,7 +86,7 @@ public class ActionDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ActionDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ActionDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -132,6 +132,8 @@ public override IActionDefinition Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ActionDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -370,7 +372,7 @@ public override IActionDefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -391,7 +393,7 @@ public override IActionDefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -448,6 +450,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ActionDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -686,7 +690,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -707,7 +711,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ActionUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ActionUsageReader.cs index 53a7ddbdf..9bedda4eb 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ActionUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ActionUsageReader.cs @@ -89,7 +89,7 @@ public class ActionUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ActionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ActionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -135,6 +135,8 @@ public override IActionUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ActionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -559,7 +561,7 @@ public override IActionUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -580,7 +582,7 @@ public override IActionUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -649,6 +651,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ActionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1073,7 +1077,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1094,7 +1098,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ActorMembershipReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ActorMembershipReader.cs index cf1a0377c..8acdcf921 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ActorMembershipReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ActorMembershipReader.cs @@ -66,7 +66,7 @@ public class ActorMembershipReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ActorMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ActorMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override IActorMembership Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ActorMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -324,7 +326,7 @@ public override IActorMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -345,7 +347,7 @@ public override IActorMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -366,7 +368,7 @@ public override IActorMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -387,7 +389,7 @@ public override IActorMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -456,6 +458,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ActorMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -668,7 +672,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -689,7 +693,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -710,7 +714,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -731,7 +735,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AllocationDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AllocationDefinitionReader.cs index 62bbacb6e..7f363dc55 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AllocationDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AllocationDefinitionReader.cs @@ -86,7 +86,7 @@ public class AllocationDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public AllocationDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public AllocationDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -132,6 +132,8 @@ public override IAllocationDefinition Read(XmlReader xmiReader, Uri currentLocat this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AllocationDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -422,7 +424,7 @@ public override IAllocationDefinition Read(XmlReader xmiReader, Uri currentLocat } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -443,7 +445,7 @@ public override IAllocationDefinition Read(XmlReader xmiReader, Uri currentLocat } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -464,7 +466,7 @@ public override IAllocationDefinition Read(XmlReader xmiReader, Uri currentLocat } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -485,7 +487,7 @@ public override IAllocationDefinition Read(XmlReader xmiReader, Uri currentLocat } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -542,6 +544,8 @@ public override async Task ReadAsync(XmlReader xmiReader, this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AllocationDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -832,7 +836,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -853,7 +857,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -874,7 +878,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -895,7 +899,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AllocationUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AllocationUsageReader.cs index 6f239134b..98d9aa3bb 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AllocationUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AllocationUsageReader.cs @@ -91,7 +91,7 @@ public class AllocationUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public AllocationUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public AllocationUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -137,6 +137,8 @@ public override IAllocationUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AllocationUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -613,7 +615,7 @@ public override IAllocationUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -634,7 +636,7 @@ public override IAllocationUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -655,7 +657,7 @@ public override IAllocationUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -676,7 +678,7 @@ public override IAllocationUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -745,6 +747,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AllocationUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1221,7 +1225,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -1242,7 +1246,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1263,7 +1267,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -1284,7 +1288,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AnalysisCaseDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AnalysisCaseDefinitionReader.cs index 076ecad0f..cf46ba9f8 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AnalysisCaseDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AnalysisCaseDefinitionReader.cs @@ -87,7 +87,7 @@ public class AnalysisCaseDefinitionReader : XmiDataReader /// The injected used to register and process external references /// The injected used to set up logging - public AnalysisCaseDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public AnalysisCaseDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -133,6 +133,8 @@ public override IAnalysisCaseDefinition Read(XmlReader xmiReader, Uri currentLoc this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AnalysisCaseDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -371,7 +373,7 @@ public override IAnalysisCaseDefinition Read(XmlReader xmiReader, Uri currentLoc } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -392,7 +394,7 @@ public override IAnalysisCaseDefinition Read(XmlReader xmiReader, Uri currentLoc } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -449,6 +451,8 @@ public override async Task ReadAsync(XmlReader xmiReade this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AnalysisCaseDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -687,7 +691,7 @@ public override async Task ReadAsync(XmlReader xmiReade } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -708,7 +712,7 @@ public override async Task ReadAsync(XmlReader xmiReade } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AnalysisCaseUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AnalysisCaseUsageReader.cs index 6711c1e9e..15486d604 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AnalysisCaseUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AnalysisCaseUsageReader.cs @@ -90,7 +90,7 @@ public class AnalysisCaseUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public AnalysisCaseUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public AnalysisCaseUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -136,6 +136,8 @@ public override IAnalysisCaseUsage Read(XmlReader xmiReader, Uri currentLocation this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AnalysisCaseUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -560,7 +562,7 @@ public override IAnalysisCaseUsage Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -581,7 +583,7 @@ public override IAnalysisCaseUsage Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -650,6 +652,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AnalysisCaseUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1074,7 +1078,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1095,7 +1099,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AnnotatingElementReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AnnotatingElementReader.cs index 8fc9178cb..e1c129add 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AnnotatingElementReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AnnotatingElementReader.cs @@ -60,7 +60,7 @@ public class AnnotatingElementReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public AnnotatingElementReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public AnnotatingElementReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -106,6 +106,8 @@ public override IAnnotatingElement Read(XmlReader xmiReader, Uri currentLocation this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AnnotatingElement", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -256,7 +258,7 @@ public override IAnnotatingElement Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -277,7 +279,7 @@ public override IAnnotatingElement Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -334,6 +336,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AnnotatingElement", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -484,7 +488,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -505,7 +509,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AnnotationReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AnnotationReader.cs index 954d5446e..625d4294a 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AnnotationReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AnnotationReader.cs @@ -60,7 +60,7 @@ public class AnnotationReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public AnnotationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public AnnotationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -106,6 +106,8 @@ public override IAnnotation Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Annotation", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -258,7 +260,7 @@ public override IAnnotation Read(XmlReader xmiReader, Uri currentLocation) } else { - var annotatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var annotatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.AnnotatedElement = annotatedElementValue; } @@ -339,7 +341,7 @@ public override IAnnotation Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -360,7 +362,7 @@ public override IAnnotation Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -381,7 +383,7 @@ public override IAnnotation Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -402,7 +404,7 @@ public override IAnnotation Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -459,6 +461,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Annotation", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -611,7 +615,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var annotatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var annotatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.AnnotatedElement = annotatedElementValue; } @@ -692,7 +696,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -713,7 +717,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -734,7 +738,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -755,7 +759,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AssertConstraintUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AssertConstraintUsageReader.cs index 05a84fd1e..ff5bc3a68 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AssertConstraintUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AssertConstraintUsageReader.cs @@ -90,7 +90,7 @@ public class AssertConstraintUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public AssertConstraintUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public AssertConstraintUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -136,6 +136,8 @@ public override IAssertConstraintUsage Read(XmlReader xmiReader, Uri currentLoca this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AssertConstraintUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -582,7 +584,7 @@ public override IAssertConstraintUsage Read(XmlReader xmiReader, Uri currentLoca } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -603,7 +605,7 @@ public override IAssertConstraintUsage Read(XmlReader xmiReader, Uri currentLoca } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -672,6 +674,8 @@ public override async Task ReadAsync(XmlReader xmiReader this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AssertConstraintUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1118,7 +1122,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1139,7 +1143,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AssignmentActionUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AssignmentActionUsageReader.cs index 7311f46d3..3cc588da3 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AssignmentActionUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AssignmentActionUsageReader.cs @@ -90,7 +90,7 @@ public class AssignmentActionUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public AssignmentActionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public AssignmentActionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -136,6 +136,8 @@ public override IAssignmentActionUsage Read(XmlReader xmiReader, Uri currentLoca this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AssignmentActionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -560,7 +562,7 @@ public override IAssignmentActionUsage Read(XmlReader xmiReader, Uri currentLoca } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -581,7 +583,7 @@ public override IAssignmentActionUsage Read(XmlReader xmiReader, Uri currentLoca } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -650,6 +652,8 @@ public override async Task ReadAsync(XmlReader xmiReader this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AssignmentActionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1074,7 +1078,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1095,7 +1099,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AssociationReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AssociationReader.cs index ccf7b99f2..7357a957f 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AssociationReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AssociationReader.cs @@ -64,7 +64,7 @@ public class AssociationReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public AssociationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public AssociationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -110,6 +110,8 @@ public override IAssociation Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Association", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -356,7 +358,7 @@ public override IAssociation Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -377,7 +379,7 @@ public override IAssociation Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -398,7 +400,7 @@ public override IAssociation Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -419,7 +421,7 @@ public override IAssociation Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -476,6 +478,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Association", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -722,7 +726,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -743,7 +747,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -764,7 +768,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -785,7 +789,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AssociationStructureReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AssociationStructureReader.cs index 11e8b0f2a..16dab3e14 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AssociationStructureReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AssociationStructureReader.cs @@ -65,7 +65,7 @@ public class AssociationStructureReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public AssociationStructureReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public AssociationStructureReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -111,6 +111,8 @@ public override IAssociationStructure Read(XmlReader xmiReader, Uri currentLocat this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AssociationStructure", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -357,7 +359,7 @@ public override IAssociationStructure Read(XmlReader xmiReader, Uri currentLocat } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -378,7 +380,7 @@ public override IAssociationStructure Read(XmlReader xmiReader, Uri currentLocat } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -399,7 +401,7 @@ public override IAssociationStructure Read(XmlReader xmiReader, Uri currentLocat } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -420,7 +422,7 @@ public override IAssociationStructure Read(XmlReader xmiReader, Uri currentLocat } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -477,6 +479,8 @@ public override async Task ReadAsync(XmlReader xmiReader, this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AssociationStructure", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -723,7 +727,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -744,7 +748,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -765,7 +769,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -786,7 +790,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AttributeDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AttributeDefinitionReader.cs index 35f18d2c8..8849373f9 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AttributeDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AttributeDefinitionReader.cs @@ -86,7 +86,7 @@ public class AttributeDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public AttributeDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public AttributeDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -132,6 +132,8 @@ public override IAttributeDefinition Read(XmlReader xmiReader, Uri currentLocati this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AttributeDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -348,7 +350,7 @@ public override IAttributeDefinition Read(XmlReader xmiReader, Uri currentLocati } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -369,7 +371,7 @@ public override IAttributeDefinition Read(XmlReader xmiReader, Uri currentLocati } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -426,6 +428,8 @@ public override async Task ReadAsync(XmlReader xmiReader, this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AttributeDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -642,7 +646,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -663,7 +667,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AttributeUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AttributeUsageReader.cs index b4572c527..c8ac97548 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AttributeUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/AttributeUsageReader.cs @@ -87,7 +87,7 @@ public class AttributeUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public AttributeUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public AttributeUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -133,6 +133,8 @@ public override IAttributeUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AttributeUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -525,7 +527,7 @@ public override IAttributeUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -546,7 +548,7 @@ public override IAttributeUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -603,6 +605,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "AttributeUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -995,7 +999,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1016,7 +1020,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/BehaviorReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/BehaviorReader.cs index 998412e4f..f4b03f555 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/BehaviorReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/BehaviorReader.cs @@ -65,7 +65,7 @@ public class BehaviorReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public BehaviorReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public BehaviorReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -111,6 +111,8 @@ public override IBehavior Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Behavior", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -305,7 +307,7 @@ public override IBehavior Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -326,7 +328,7 @@ public override IBehavior Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -383,6 +385,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri current this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Behavior", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -577,7 +581,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri current } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -598,7 +602,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri current } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/BindingConnectorAsUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/BindingConnectorAsUsageReader.cs index aa9b86f7a..b564d34ba 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/BindingConnectorAsUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/BindingConnectorAsUsageReader.cs @@ -88,7 +88,7 @@ public class BindingConnectorAsUsageReader : XmiDataReader /// The injected used to register and process external references /// The injected used to set up logging - public BindingConnectorAsUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public BindingConnectorAsUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -134,6 +134,8 @@ public override IBindingConnectorAsUsage Read(XmlReader xmiReader, Uri currentLo this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "BindingConnectorAsUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -578,7 +580,7 @@ public override IBindingConnectorAsUsage Read(XmlReader xmiReader, Uri currentLo } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -599,7 +601,7 @@ public override IBindingConnectorAsUsage Read(XmlReader xmiReader, Uri currentLo } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -620,7 +622,7 @@ public override IBindingConnectorAsUsage Read(XmlReader xmiReader, Uri currentLo } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -641,7 +643,7 @@ public override IBindingConnectorAsUsage Read(XmlReader xmiReader, Uri currentLo } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -698,6 +700,8 @@ public override async Task ReadAsync(XmlReader xmiRead this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "BindingConnectorAsUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1142,7 +1146,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -1163,7 +1167,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1184,7 +1188,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -1205,7 +1209,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/BindingConnectorReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/BindingConnectorReader.cs index 9a40b7849..db51ccd68 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/BindingConnectorReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/BindingConnectorReader.cs @@ -65,7 +65,7 @@ public class BindingConnectorReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public BindingConnectorReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public BindingConnectorReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -111,6 +111,8 @@ public override IBindingConnector Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "BindingConnector", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -555,7 +557,7 @@ public override IBindingConnector Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -576,7 +578,7 @@ public override IBindingConnector Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -597,7 +599,7 @@ public override IBindingConnector Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -618,7 +620,7 @@ public override IBindingConnector Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -675,6 +677,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "BindingConnector", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1119,7 +1123,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -1140,7 +1144,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1161,7 +1165,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -1182,7 +1186,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/BooleanExpressionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/BooleanExpressionReader.cs index 0136c897b..8ee41bac1 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/BooleanExpressionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/BooleanExpressionReader.cs @@ -65,7 +65,7 @@ public class BooleanExpressionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public BooleanExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public BooleanExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -111,6 +111,8 @@ public override IBooleanExpression Read(XmlReader xmiReader, Uri currentLocation this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "BooleanExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -503,7 +505,7 @@ public override IBooleanExpression Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -524,7 +526,7 @@ public override IBooleanExpression Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -581,6 +583,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "BooleanExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -973,7 +977,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -994,7 +998,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CalculationDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CalculationDefinitionReader.cs index 683e6af2b..fa19345e4 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CalculationDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CalculationDefinitionReader.cs @@ -87,7 +87,7 @@ public class CalculationDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public CalculationDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public CalculationDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -133,6 +133,8 @@ public override ICalculationDefinition Read(XmlReader xmiReader, Uri currentLoca this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "CalculationDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -371,7 +373,7 @@ public override ICalculationDefinition Read(XmlReader xmiReader, Uri currentLoca } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -392,7 +394,7 @@ public override ICalculationDefinition Read(XmlReader xmiReader, Uri currentLoca } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -449,6 +451,8 @@ public override async Task ReadAsync(XmlReader xmiReader this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "CalculationDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -687,7 +691,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -708,7 +712,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CalculationUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CalculationUsageReader.cs index 5d5a154c5..9e9749d6f 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CalculationUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CalculationUsageReader.cs @@ -90,7 +90,7 @@ public class CalculationUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public CalculationUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public CalculationUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -136,6 +136,8 @@ public override ICalculationUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "CalculationUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -560,7 +562,7 @@ public override ICalculationUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -581,7 +583,7 @@ public override ICalculationUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -650,6 +652,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "CalculationUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1074,7 +1078,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1095,7 +1099,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CaseDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CaseDefinitionReader.cs index fc614ccae..a6dc48ce7 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CaseDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CaseDefinitionReader.cs @@ -87,7 +87,7 @@ public class CaseDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public CaseDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public CaseDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -133,6 +133,8 @@ public override ICaseDefinition Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "CaseDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -371,7 +373,7 @@ public override ICaseDefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -392,7 +394,7 @@ public override ICaseDefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -449,6 +451,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "CaseDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -687,7 +691,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -708,7 +712,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CaseUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CaseUsageReader.cs index bb080006c..857ee1a3f 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CaseUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CaseUsageReader.cs @@ -90,7 +90,7 @@ public class CaseUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public CaseUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public CaseUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -136,6 +136,8 @@ public override ICaseUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "CaseUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -560,7 +562,7 @@ public override ICaseUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -581,7 +583,7 @@ public override ICaseUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -650,6 +652,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "CaseUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1074,7 +1078,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1095,7 +1099,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ClassReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ClassReader.cs index c1758bcd4..5cfabf509 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ClassReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ClassReader.cs @@ -64,7 +64,7 @@ public class ClassReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ClassReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ClassReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -110,6 +110,8 @@ public override IClass Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Class", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -304,7 +306,7 @@ public override IClass Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -325,7 +327,7 @@ public override IClass Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -382,6 +384,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoc this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Class", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -576,7 +580,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoc } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -597,7 +601,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoc } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ClassifierReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ClassifierReader.cs index 186383511..2219db3e7 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ClassifierReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ClassifierReader.cs @@ -63,7 +63,7 @@ public class ClassifierReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ClassifierReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ClassifierReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -109,6 +109,8 @@ public override IClassifier Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Classifier", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -303,7 +305,7 @@ public override IClassifier Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -324,7 +326,7 @@ public override IClassifier Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -381,6 +383,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Classifier", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -575,7 +579,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -596,7 +600,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CollectExpressionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CollectExpressionReader.cs index a79f620d2..eac3938d2 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CollectExpressionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CollectExpressionReader.cs @@ -66,7 +66,7 @@ public class CollectExpressionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public CollectExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public CollectExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override ICollectExpression Read(XmlReader xmiReader, Uri currentLocation this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "CollectExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -523,7 +525,7 @@ public override ICollectExpression Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -544,7 +546,7 @@ public override ICollectExpression Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -601,6 +603,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "CollectExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1012,7 +1016,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1033,7 +1037,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CommentReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CommentReader.cs index 170e4edf9..50e095542 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CommentReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CommentReader.cs @@ -60,7 +60,7 @@ public class CommentReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public CommentReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public CommentReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -106,6 +106,8 @@ public override IComment Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Comment", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -294,7 +296,7 @@ public override IComment Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -315,7 +317,7 @@ public override IComment Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -372,6 +374,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentL this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Comment", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -560,7 +564,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentL } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -581,7 +585,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentL } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConcernDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConcernDefinitionReader.cs index 6c1d6c156..cbfec0828 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConcernDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConcernDefinitionReader.cs @@ -87,7 +87,7 @@ public class ConcernDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ConcernDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ConcernDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -133,6 +133,8 @@ public override IConcernDefinition Read(XmlReader xmiReader, Uri currentLocation this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ConcernDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -359,7 +361,7 @@ public override IConcernDefinition Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -380,7 +382,7 @@ public override IConcernDefinition Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -449,6 +451,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ConcernDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -675,7 +679,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -696,7 +700,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConcernUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConcernUsageReader.cs index 673877970..a11d7792f 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConcernUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConcernUsageReader.cs @@ -90,7 +90,7 @@ public class ConcernUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ConcernUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ConcernUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -136,6 +136,8 @@ public override IConcernUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ConcernUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -548,7 +550,7 @@ public override IConcernUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -569,7 +571,7 @@ public override IConcernUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -650,6 +652,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ConcernUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1062,7 +1066,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1083,7 +1087,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConjugatedPortDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConjugatedPortDefinitionReader.cs index d7788f8bf..b74c75e32 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConjugatedPortDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConjugatedPortDefinitionReader.cs @@ -85,7 +85,7 @@ public class ConjugatedPortDefinitionReader : XmiDataReader /// The injected used to register and process external references /// The injected used to set up logging - public ConjugatedPortDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ConjugatedPortDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -131,6 +131,8 @@ public override IConjugatedPortDefinition Read(XmlReader xmiReader, Uri currentL this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ConjugatedPortDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -369,7 +371,7 @@ public override IConjugatedPortDefinition Read(XmlReader xmiReader, Uri currentL } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -390,7 +392,7 @@ public override IConjugatedPortDefinition Read(XmlReader xmiReader, Uri currentL } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -447,6 +449,8 @@ public override async Task ReadAsync(XmlReader xmiRea this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ConjugatedPortDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -685,7 +689,7 @@ public override async Task ReadAsync(XmlReader xmiRea } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -706,7 +710,7 @@ public override async Task ReadAsync(XmlReader xmiRea } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConjugatedPortTypingReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConjugatedPortTypingReader.cs index 4b2c6b65c..4b40a7a32 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConjugatedPortTypingReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConjugatedPortTypingReader.cs @@ -63,7 +63,7 @@ public class ConjugatedPortTypingReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ConjugatedPortTypingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ConjugatedPortTypingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -109,6 +109,8 @@ public override IConjugatedPortTyping Read(XmlReader xmiReader, Uri currentLocat this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ConjugatedPortTyping", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -271,7 +273,7 @@ public override IConjugatedPortTyping Read(XmlReader xmiReader, Uri currentLocat } else { - var conjugatedPortDefinitionValue = (IConjugatedPortDefinition)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var conjugatedPortDefinitionValue = (IConjugatedPortDefinition)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.ConjugatedPortDefinition = conjugatedPortDefinitionValue; } @@ -352,7 +354,7 @@ public override IConjugatedPortTyping Read(XmlReader xmiReader, Uri currentLocat } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -373,7 +375,7 @@ public override IConjugatedPortTyping Read(XmlReader xmiReader, Uri currentLocat } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -394,7 +396,7 @@ public override IConjugatedPortTyping Read(XmlReader xmiReader, Uri currentLocat } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -415,7 +417,7 @@ public override IConjugatedPortTyping Read(XmlReader xmiReader, Uri currentLocat } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -436,7 +438,7 @@ public override IConjugatedPortTyping Read(XmlReader xmiReader, Uri currentLocat } else { - var typedFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var typedFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.TypedFeature = typedFeatureValue; } @@ -493,6 +495,8 @@ public override async Task ReadAsync(XmlReader xmiReader, this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ConjugatedPortTyping", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -655,7 +659,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var conjugatedPortDefinitionValue = (IConjugatedPortDefinition)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var conjugatedPortDefinitionValue = (IConjugatedPortDefinition)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.ConjugatedPortDefinition = conjugatedPortDefinitionValue; } @@ -736,7 +740,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -757,7 +761,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -778,7 +782,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -799,7 +803,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -820,7 +824,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var typedFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var typedFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.TypedFeature = typedFeatureValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConjugationReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConjugationReader.cs index ab8533117..54f56de55 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConjugationReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConjugationReader.cs @@ -61,7 +61,7 @@ public class ConjugationReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ConjugationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ConjugationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -107,6 +107,8 @@ public override IConjugation Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Conjugation", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -269,7 +271,7 @@ public override IConjugation Read(XmlReader xmiReader, Uri currentLocation) } else { - var conjugatedTypeValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var conjugatedTypeValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.ConjugatedType = conjugatedTypeValue; } @@ -350,7 +352,7 @@ public override IConjugation Read(XmlReader xmiReader, Uri currentLocation) } else { - var originalTypeValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var originalTypeValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.OriginalType = originalTypeValue; } @@ -371,7 +373,7 @@ public override IConjugation Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -392,7 +394,7 @@ public override IConjugation Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -413,7 +415,7 @@ public override IConjugation Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -434,7 +436,7 @@ public override IConjugation Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -491,6 +493,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Conjugation", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -653,7 +657,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr } else { - var conjugatedTypeValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var conjugatedTypeValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.ConjugatedType = conjugatedTypeValue; } @@ -734,7 +738,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr } else { - var originalTypeValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var originalTypeValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.OriginalType = originalTypeValue; } @@ -755,7 +759,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -776,7 +780,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -797,7 +801,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -818,7 +822,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConnectionDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConnectionDefinitionReader.cs index 75004ee56..c89a97ae8 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConnectionDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConnectionDefinitionReader.cs @@ -86,7 +86,7 @@ public class ConnectionDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ConnectionDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ConnectionDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -132,6 +132,8 @@ public override IConnectionDefinition Read(XmlReader xmiReader, Uri currentLocat this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ConnectionDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -422,7 +424,7 @@ public override IConnectionDefinition Read(XmlReader xmiReader, Uri currentLocat } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -443,7 +445,7 @@ public override IConnectionDefinition Read(XmlReader xmiReader, Uri currentLocat } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -464,7 +466,7 @@ public override IConnectionDefinition Read(XmlReader xmiReader, Uri currentLocat } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -485,7 +487,7 @@ public override IConnectionDefinition Read(XmlReader xmiReader, Uri currentLocat } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -542,6 +544,8 @@ public override async Task ReadAsync(XmlReader xmiReader, this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ConnectionDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -832,7 +836,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -853,7 +857,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -874,7 +878,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -895,7 +899,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConnectionUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConnectionUsageReader.cs index 05efa2ac8..c8596b18b 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConnectionUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConnectionUsageReader.cs @@ -91,7 +91,7 @@ public class ConnectionUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ConnectionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ConnectionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -137,6 +137,8 @@ public override IConnectionUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ConnectionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -613,7 +615,7 @@ public override IConnectionUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -634,7 +636,7 @@ public override IConnectionUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -655,7 +657,7 @@ public override IConnectionUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -676,7 +678,7 @@ public override IConnectionUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -745,6 +747,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ConnectionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1221,7 +1225,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -1242,7 +1246,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1263,7 +1267,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -1284,7 +1288,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConnectorReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConnectorReader.cs index 85fd92756..c90ff0f25 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConnectorReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConnectorReader.cs @@ -65,7 +65,7 @@ public class ConnectorReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ConnectorReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ConnectorReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -111,6 +111,8 @@ public override IConnector Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Connector", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -555,7 +557,7 @@ public override IConnector Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -576,7 +578,7 @@ public override IConnector Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -597,7 +599,7 @@ public override IConnector Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -618,7 +620,7 @@ public override IConnector Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -675,6 +677,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Connector", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1119,7 +1123,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -1140,7 +1144,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1161,7 +1165,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -1182,7 +1186,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConstraintDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConstraintDefinitionReader.cs index af10e8709..780c35829 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConstraintDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConstraintDefinitionReader.cs @@ -87,7 +87,7 @@ public class ConstraintDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ConstraintDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ConstraintDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -133,6 +133,8 @@ public override IConstraintDefinition Read(XmlReader xmiReader, Uri currentLocat this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ConstraintDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -371,7 +373,7 @@ public override IConstraintDefinition Read(XmlReader xmiReader, Uri currentLocat } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -392,7 +394,7 @@ public override IConstraintDefinition Read(XmlReader xmiReader, Uri currentLocat } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -449,6 +451,8 @@ public override async Task ReadAsync(XmlReader xmiReader, this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ConstraintDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -687,7 +691,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -708,7 +712,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConstraintUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConstraintUsageReader.cs index 1b568b5f1..0f2f25753 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConstraintUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConstraintUsageReader.cs @@ -90,7 +90,7 @@ public class ConstraintUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ConstraintUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ConstraintUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -136,6 +136,8 @@ public override IConstraintUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ConstraintUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -560,7 +562,7 @@ public override IConstraintUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -581,7 +583,7 @@ public override IConstraintUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -650,6 +652,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ConstraintUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1074,7 +1078,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1095,7 +1099,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConstructorExpressionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConstructorExpressionReader.cs index 72ab75a45..b7f3c0d1c 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConstructorExpressionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ConstructorExpressionReader.cs @@ -66,7 +66,7 @@ public class ConstructorExpressionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ConstructorExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ConstructorExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override IConstructorExpression Read(XmlReader xmiReader, Uri currentLoca this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ConstructorExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -504,7 +506,7 @@ public override IConstructorExpression Read(XmlReader xmiReader, Uri currentLoca } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -525,7 +527,7 @@ public override IConstructorExpression Read(XmlReader xmiReader, Uri currentLoca } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -582,6 +584,8 @@ public override async Task ReadAsync(XmlReader xmiReader this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ConstructorExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -974,7 +978,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -995,7 +999,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CrossSubsettingReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CrossSubsettingReader.cs index da7f31b6b..178470ac4 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CrossSubsettingReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/CrossSubsettingReader.cs @@ -62,7 +62,7 @@ public class CrossSubsettingReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public CrossSubsettingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public CrossSubsettingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -108,6 +108,8 @@ public override ICrossSubsetting Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "CrossSubsetting", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -260,7 +262,7 @@ public override ICrossSubsetting Read(XmlReader xmiReader, Uri currentLocation) } else { - var crossedFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var crossedFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.CrossedFeature = crossedFeatureValue; } @@ -341,7 +343,7 @@ public override ICrossSubsetting Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -362,7 +364,7 @@ public override ICrossSubsetting Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -383,7 +385,7 @@ public override ICrossSubsetting Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -404,7 +406,7 @@ public override ICrossSubsetting Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -461,6 +463,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "CrossSubsetting", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -613,7 +617,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var crossedFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var crossedFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.CrossedFeature = crossedFeatureValue; } @@ -694,7 +698,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -715,7 +719,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -736,7 +740,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -757,7 +761,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DataTypeReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DataTypeReader.cs index 9c78352ac..7911b81a8 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DataTypeReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DataTypeReader.cs @@ -64,7 +64,7 @@ public class DataTypeReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public DataTypeReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public DataTypeReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -110,6 +110,8 @@ public override IDataType Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "DataType", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -304,7 +306,7 @@ public override IDataType Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -325,7 +327,7 @@ public override IDataType Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -382,6 +384,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri current this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "DataType", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -576,7 +580,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri current } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -597,7 +601,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri current } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DecisionNodeReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DecisionNodeReader.cs index 940e8818f..7a38e20d1 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DecisionNodeReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DecisionNodeReader.cs @@ -89,7 +89,7 @@ public class DecisionNodeReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public DecisionNodeReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public DecisionNodeReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -135,6 +135,8 @@ public override IDecisionNode Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "DecisionNode", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -559,7 +561,7 @@ public override IDecisionNode Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -580,7 +582,7 @@ public override IDecisionNode Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -649,6 +651,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "DecisionNode", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1073,7 +1077,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1094,7 +1098,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DefinitionReader.cs index 53c8c50e4..056348dde 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DefinitionReader.cs @@ -85,7 +85,7 @@ public class DefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public DefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public DefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -131,6 +131,8 @@ public override IDefinition Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Definition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -347,7 +349,7 @@ public override IDefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -368,7 +370,7 @@ public override IDefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -425,6 +427,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Definition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -641,7 +645,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -662,7 +666,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DependencyReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DependencyReader.cs index 6de94ece1..397f6d8f6 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DependencyReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DependencyReader.cs @@ -61,7 +61,7 @@ public class DependencyReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public DependencyReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public DependencyReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -107,6 +107,8 @@ public override IDependency Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Dependency", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -289,7 +291,7 @@ public override IDependency Read(XmlReader xmiReader, Uri currentLocation) } else { - var clientValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var clientValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Client.Add(clientValue); } @@ -370,7 +372,7 @@ public override IDependency Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -391,7 +393,7 @@ public override IDependency Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -412,7 +414,7 @@ public override IDependency Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -433,7 +435,7 @@ public override IDependency Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -454,7 +456,7 @@ public override IDependency Read(XmlReader xmiReader, Uri currentLocation) } else { - var supplierValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var supplierValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Supplier.Add(supplierValue); } @@ -511,6 +513,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Dependency", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -693,7 +697,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var clientValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var clientValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Client.Add(clientValue); } @@ -774,7 +778,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -795,7 +799,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -816,7 +820,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -837,7 +841,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -858,7 +862,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var supplierValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var supplierValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Supplier.Add(supplierValue); } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DifferencingReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DifferencingReader.cs index dd2bd3efe..ff794622e 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DifferencingReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DifferencingReader.cs @@ -61,7 +61,7 @@ public class DifferencingReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public DifferencingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public DifferencingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -107,6 +107,8 @@ public override IDifferencing Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Differencing", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -283,7 +285,7 @@ public override IDifferencing Read(XmlReader xmiReader, Uri currentLocation) } else { - var differencingTypeValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var differencingTypeValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.DifferencingType = differencingTypeValue; } @@ -340,7 +342,7 @@ public override IDifferencing Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -361,7 +363,7 @@ public override IDifferencing Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -382,7 +384,7 @@ public override IDifferencing Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -403,7 +405,7 @@ public override IDifferencing Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -460,6 +462,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Differencing", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -636,7 +640,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var differencingTypeValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var differencingTypeValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.DifferencingType = differencingTypeValue; } @@ -693,7 +697,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -714,7 +718,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -735,7 +739,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -756,7 +760,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DisjoiningReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DisjoiningReader.cs index 1a242070d..095a834ac 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DisjoiningReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DisjoiningReader.cs @@ -61,7 +61,7 @@ public class DisjoiningReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public DisjoiningReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public DisjoiningReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -107,6 +107,8 @@ public override IDisjoining Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Disjoining", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -293,7 +295,7 @@ public override IDisjoining Read(XmlReader xmiReader, Uri currentLocation) } else { - var disjoiningTypeValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var disjoiningTypeValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.DisjoiningType = disjoiningTypeValue; } @@ -350,7 +352,7 @@ public override IDisjoining Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -371,7 +373,7 @@ public override IDisjoining Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -392,7 +394,7 @@ public override IDisjoining Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -413,7 +415,7 @@ public override IDisjoining Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -434,7 +436,7 @@ public override IDisjoining Read(XmlReader xmiReader, Uri currentLocation) } else { - var typeDisjoinedValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var typeDisjoinedValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.TypeDisjoined = typeDisjoinedValue; } @@ -491,6 +493,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Disjoining", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -677,7 +681,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var disjoiningTypeValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var disjoiningTypeValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.DisjoiningType = disjoiningTypeValue; } @@ -734,7 +738,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -755,7 +759,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -776,7 +780,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -797,7 +801,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -818,7 +822,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var typeDisjoinedValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var typeDisjoinedValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.TypeDisjoined = typeDisjoinedValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DocumentationReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DocumentationReader.cs index bc6543019..b7aae163b 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DocumentationReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/DocumentationReader.cs @@ -60,7 +60,7 @@ public class DocumentationReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public DocumentationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public DocumentationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -106,6 +106,8 @@ public override IDocumentation Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Documentation", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -294,7 +296,7 @@ public override IDocumentation Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -315,7 +317,7 @@ public override IDocumentation Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -372,6 +374,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Documentation", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -560,7 +564,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -581,7 +585,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ElementFilterMembershipReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ElementFilterMembershipReader.cs index c3128110f..8abb0bbc4 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ElementFilterMembershipReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ElementFilterMembershipReader.cs @@ -63,7 +63,7 @@ public class ElementFilterMembershipReader : XmiDataReader /// The injected used to register and process external references /// The injected used to set up logging - public ElementFilterMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ElementFilterMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -109,6 +109,8 @@ public override IElementFilterMembership Read(XmlReader xmiReader, Uri currentLo this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ElementFilterMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -321,7 +323,7 @@ public override IElementFilterMembership Read(XmlReader xmiReader, Uri currentLo } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -342,7 +344,7 @@ public override IElementFilterMembership Read(XmlReader xmiReader, Uri currentLo } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -363,7 +365,7 @@ public override IElementFilterMembership Read(XmlReader xmiReader, Uri currentLo } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -384,7 +386,7 @@ public override IElementFilterMembership Read(XmlReader xmiReader, Uri currentLo } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -453,6 +455,8 @@ public override async Task ReadAsync(XmlReader xmiRead this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ElementFilterMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -665,7 +669,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -686,7 +690,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -707,7 +711,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -728,7 +732,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/EndFeatureMembershipReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/EndFeatureMembershipReader.cs index 9df6c142f..82c44d161 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/EndFeatureMembershipReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/EndFeatureMembershipReader.cs @@ -63,7 +63,7 @@ public class EndFeatureMembershipReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public EndFeatureMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public EndFeatureMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -109,6 +109,8 @@ public override IEndFeatureMembership Read(XmlReader xmiReader, Uri currentLocat this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "EndFeatureMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -321,7 +323,7 @@ public override IEndFeatureMembership Read(XmlReader xmiReader, Uri currentLocat } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -342,7 +344,7 @@ public override IEndFeatureMembership Read(XmlReader xmiReader, Uri currentLocat } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -363,7 +365,7 @@ public override IEndFeatureMembership Read(XmlReader xmiReader, Uri currentLocat } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -384,7 +386,7 @@ public override IEndFeatureMembership Read(XmlReader xmiReader, Uri currentLocat } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -453,6 +455,8 @@ public override async Task ReadAsync(XmlReader xmiReader, this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "EndFeatureMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -665,7 +669,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -686,7 +690,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -707,7 +711,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -728,7 +732,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/EnumerationDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/EnumerationDefinitionReader.cs index 1abcad16c..d0908301b 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/EnumerationDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/EnumerationDefinitionReader.cs @@ -85,7 +85,7 @@ public class EnumerationDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public EnumerationDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public EnumerationDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -131,6 +131,8 @@ public override IEnumerationDefinition Read(XmlReader xmiReader, Uri currentLoca this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "EnumerationDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -347,7 +349,7 @@ public override IEnumerationDefinition Read(XmlReader xmiReader, Uri currentLoca } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -368,7 +370,7 @@ public override IEnumerationDefinition Read(XmlReader xmiReader, Uri currentLoca } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -425,6 +427,8 @@ public override async Task ReadAsync(XmlReader xmiReader this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "EnumerationDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -641,7 +645,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -662,7 +666,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/EnumerationUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/EnumerationUsageReader.cs index 745511aed..26ab5476c 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/EnumerationUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/EnumerationUsageReader.cs @@ -87,7 +87,7 @@ public class EnumerationUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public EnumerationUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public EnumerationUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -133,6 +133,8 @@ public override IEnumerationUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "EnumerationUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -525,7 +527,7 @@ public override IEnumerationUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -546,7 +548,7 @@ public override IEnumerationUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -603,6 +605,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "EnumerationUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -995,7 +999,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1016,7 +1020,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/EventOccurrenceUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/EventOccurrenceUsageReader.cs index 9f2a55a8e..0ad5a9838 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/EventOccurrenceUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/EventOccurrenceUsageReader.cs @@ -88,7 +88,7 @@ public class EventOccurrenceUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public EventOccurrenceUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public EventOccurrenceUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -134,6 +134,8 @@ public override IEventOccurrenceUsage Read(XmlReader xmiReader, Uri currentLocat this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "EventOccurrenceUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -558,7 +560,7 @@ public override IEventOccurrenceUsage Read(XmlReader xmiReader, Uri currentLocat } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -579,7 +581,7 @@ public override IEventOccurrenceUsage Read(XmlReader xmiReader, Uri currentLocat } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -648,6 +650,8 @@ public override async Task ReadAsync(XmlReader xmiReader, this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "EventOccurrenceUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1072,7 +1076,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1093,7 +1097,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ExhibitStateUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ExhibitStateUsageReader.cs index 4ce391bed..47590aaea 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ExhibitStateUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ExhibitStateUsageReader.cs @@ -89,7 +89,7 @@ public class ExhibitStateUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ExhibitStateUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ExhibitStateUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -135,6 +135,8 @@ public override IExhibitStateUsage Read(XmlReader xmiReader, Uri currentLocation this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ExhibitStateUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -581,7 +583,7 @@ public override IExhibitStateUsage Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -602,7 +604,7 @@ public override IExhibitStateUsage Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -671,6 +673,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ExhibitStateUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1117,7 +1121,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1138,7 +1142,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ExpressionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ExpressionReader.cs index 853b894f7..de3c24505 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ExpressionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ExpressionReader.cs @@ -65,7 +65,7 @@ public class ExpressionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -111,6 +111,8 @@ public override IExpression Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Expression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -503,7 +505,7 @@ public override IExpression Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -524,7 +526,7 @@ public override IExpression Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -581,6 +583,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Expression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -973,7 +977,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -994,7 +998,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureChainExpressionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureChainExpressionReader.cs index 647fd40b2..d41c76566 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureChainExpressionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureChainExpressionReader.cs @@ -66,7 +66,7 @@ public class FeatureChainExpressionReader : XmiDataReader /// The injected used to register and process external references /// The injected used to set up logging - public FeatureChainExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public FeatureChainExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override IFeatureChainExpression Read(XmlReader xmiReader, Uri currentLoc this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FeatureChainExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -523,7 +525,7 @@ public override IFeatureChainExpression Read(XmlReader xmiReader, Uri currentLoc } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -544,7 +546,7 @@ public override IFeatureChainExpression Read(XmlReader xmiReader, Uri currentLoc } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -601,6 +603,8 @@ public override async Task ReadAsync(XmlReader xmiReade this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FeatureChainExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1012,7 +1016,7 @@ public override async Task ReadAsync(XmlReader xmiReade } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1033,7 +1037,7 @@ public override async Task ReadAsync(XmlReader xmiReade } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureChainingReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureChainingReader.cs index 90e8e7f9d..aaece05eb 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureChainingReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureChainingReader.cs @@ -61,7 +61,7 @@ public class FeatureChainingReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public FeatureChainingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public FeatureChainingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -107,6 +107,8 @@ public override IFeatureChaining Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FeatureChaining", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -259,7 +261,7 @@ public override IFeatureChaining Read(XmlReader xmiReader, Uri currentLocation) } else { - var chainingFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var chainingFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.ChainingFeature = chainingFeatureValue; } @@ -340,7 +342,7 @@ public override IFeatureChaining Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -361,7 +363,7 @@ public override IFeatureChaining Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -382,7 +384,7 @@ public override IFeatureChaining Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -403,7 +405,7 @@ public override IFeatureChaining Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -460,6 +462,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FeatureChaining", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -612,7 +616,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var chainingFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var chainingFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.ChainingFeature = chainingFeatureValue; } @@ -693,7 +697,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -714,7 +718,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -735,7 +739,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -756,7 +760,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureInvertingReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureInvertingReader.cs index 0309ab431..2309960ac 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureInvertingReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureInvertingReader.cs @@ -61,7 +61,7 @@ public class FeatureInvertingReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public FeatureInvertingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public FeatureInvertingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -107,6 +107,8 @@ public override IFeatureInverting Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FeatureInverting", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -305,7 +307,7 @@ public override IFeatureInverting Read(XmlReader xmiReader, Uri currentLocation) } else { - var featureInvertedValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var featureInvertedValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.FeatureInverted = featureInvertedValue; } @@ -326,7 +328,7 @@ public override IFeatureInverting Read(XmlReader xmiReader, Uri currentLocation) } else { - var invertingFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var invertingFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.InvertingFeature = invertingFeatureValue; } @@ -371,7 +373,7 @@ public override IFeatureInverting Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -392,7 +394,7 @@ public override IFeatureInverting Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -413,7 +415,7 @@ public override IFeatureInverting Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -434,7 +436,7 @@ public override IFeatureInverting Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -491,6 +493,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FeatureInverting", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -689,7 +693,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var featureInvertedValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var featureInvertedValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.FeatureInverted = featureInvertedValue; } @@ -710,7 +714,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var invertingFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var invertingFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.InvertingFeature = invertingFeatureValue; } @@ -755,7 +759,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -776,7 +780,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -797,7 +801,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -818,7 +822,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureMembershipReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureMembershipReader.cs index 6aae31a9d..76ddfe139 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureMembershipReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureMembershipReader.cs @@ -63,7 +63,7 @@ public class FeatureMembershipReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public FeatureMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public FeatureMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -109,6 +109,8 @@ public override IFeatureMembership Read(XmlReader xmiReader, Uri currentLocation this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FeatureMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -321,7 +323,7 @@ public override IFeatureMembership Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -342,7 +344,7 @@ public override IFeatureMembership Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -363,7 +365,7 @@ public override IFeatureMembership Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -384,7 +386,7 @@ public override IFeatureMembership Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -453,6 +455,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FeatureMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -665,7 +669,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -686,7 +690,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -707,7 +711,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -728,7 +732,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureReader.cs index dcf987af4..9373f8739 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureReader.cs @@ -63,7 +63,7 @@ public class FeatureReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public FeatureReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public FeatureReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -109,6 +109,8 @@ public override IFeature Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Feature", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -501,7 +503,7 @@ public override IFeature Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -522,7 +524,7 @@ public override IFeature Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -579,6 +581,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentL this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Feature", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -971,7 +975,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentL } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -992,7 +996,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentL } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureReferenceExpressionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureReferenceExpressionReader.cs index 1ee370c4e..da373fcfe 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureReferenceExpressionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureReferenceExpressionReader.cs @@ -66,7 +66,7 @@ public class FeatureReferenceExpressionReader : XmiDataReader /// The injected used to register and process external references /// The injected used to set up logging - public FeatureReferenceExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public FeatureReferenceExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override IFeatureReferenceExpression Read(XmlReader xmiReader, Uri curren this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FeatureReferenceExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -504,7 +506,7 @@ public override IFeatureReferenceExpression Read(XmlReader xmiReader, Uri curren } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -525,7 +527,7 @@ public override IFeatureReferenceExpression Read(XmlReader xmiReader, Uri curren } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -582,6 +584,8 @@ public override async Task ReadAsync(XmlReader xmiR this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FeatureReferenceExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -974,7 +978,7 @@ public override async Task ReadAsync(XmlReader xmiR } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -995,7 +999,7 @@ public override async Task ReadAsync(XmlReader xmiR } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureTypingReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureTypingReader.cs index c0ef37ab4..45b598bb7 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureTypingReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureTypingReader.cs @@ -62,7 +62,7 @@ public class FeatureTypingReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public FeatureTypingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public FeatureTypingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -108,6 +108,8 @@ public override IFeatureTyping Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FeatureTyping", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -330,7 +332,7 @@ public override IFeatureTyping Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -351,7 +353,7 @@ public override IFeatureTyping Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -372,7 +374,7 @@ public override IFeatureTyping Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -393,7 +395,7 @@ public override IFeatureTyping Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -414,7 +416,7 @@ public override IFeatureTyping Read(XmlReader xmiReader, Uri currentLocation) } else { - var typeValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var typeValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Type = typeValue; } @@ -435,7 +437,7 @@ public override IFeatureTyping Read(XmlReader xmiReader, Uri currentLocation) } else { - var typedFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var typedFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.TypedFeature = typedFeatureValue; } @@ -492,6 +494,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FeatureTyping", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -714,7 +718,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -735,7 +739,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -756,7 +760,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -777,7 +781,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -798,7 +802,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var typeValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var typeValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Type = typeValue; } @@ -819,7 +823,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var typedFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var typedFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.TypedFeature = typedFeatureValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureValueReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureValueReader.cs index 42662135e..e1c48ca1b 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureValueReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FeatureValueReader.cs @@ -64,7 +64,7 @@ public class FeatureValueReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public FeatureValueReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public FeatureValueReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -110,6 +110,8 @@ public override IFeatureValue Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FeatureValue", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -366,7 +368,7 @@ public override IFeatureValue Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -387,7 +389,7 @@ public override IFeatureValue Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -408,7 +410,7 @@ public override IFeatureValue Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -429,7 +431,7 @@ public override IFeatureValue Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -498,6 +500,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FeatureValue", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -754,7 +758,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -775,7 +779,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -796,7 +800,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -817,7 +821,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FlowDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FlowDefinitionReader.cs index 40a98ffd2..59e97e23d 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FlowDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FlowDefinitionReader.cs @@ -88,7 +88,7 @@ public class FlowDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public FlowDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public FlowDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -134,6 +134,8 @@ public override IFlowDefinition Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FlowDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -424,7 +426,7 @@ public override IFlowDefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -445,7 +447,7 @@ public override IFlowDefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -466,7 +468,7 @@ public override IFlowDefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -487,7 +489,7 @@ public override IFlowDefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -544,6 +546,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FlowDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -834,7 +838,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -855,7 +859,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -876,7 +880,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -897,7 +901,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FlowEndReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FlowEndReader.cs index 43b446e32..937fb9502 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FlowEndReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FlowEndReader.cs @@ -64,7 +64,7 @@ public class FlowEndReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public FlowEndReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public FlowEndReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -110,6 +110,8 @@ public override IFlowEnd Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FlowEnd", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -502,7 +504,7 @@ public override IFlowEnd Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -523,7 +525,7 @@ public override IFlowEnd Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -580,6 +582,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentL this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FlowEnd", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -972,7 +976,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentL } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -993,7 +997,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentL } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FlowReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FlowReader.cs index 58d1dfaa5..68f1f66ae 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FlowReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FlowReader.cs @@ -68,7 +68,7 @@ public class FlowReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public FlowReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public FlowReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -114,6 +114,8 @@ public override IFlow Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Flow", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -558,7 +560,7 @@ public override IFlow Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -579,7 +581,7 @@ public override IFlow Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -600,7 +602,7 @@ public override IFlow Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -621,7 +623,7 @@ public override IFlow Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -678,6 +680,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoca this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Flow", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1122,7 +1126,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoca } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -1143,7 +1147,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoca } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1164,7 +1168,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoca } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -1185,7 +1189,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoca } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FlowUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FlowUsageReader.cs index c4e4b70a1..631801be2 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FlowUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FlowUsageReader.cs @@ -92,7 +92,7 @@ public class FlowUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public FlowUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public FlowUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -138,6 +138,8 @@ public override IFlowUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FlowUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -614,7 +616,7 @@ public override IFlowUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -635,7 +637,7 @@ public override IFlowUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -656,7 +658,7 @@ public override IFlowUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -677,7 +679,7 @@ public override IFlowUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -746,6 +748,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FlowUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1222,7 +1226,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -1243,7 +1247,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1264,7 +1268,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -1285,7 +1289,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ForLoopActionUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ForLoopActionUsageReader.cs index 0d30f3117..0846e60bd 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ForLoopActionUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ForLoopActionUsageReader.cs @@ -90,7 +90,7 @@ public class ForLoopActionUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ForLoopActionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ForLoopActionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -136,6 +136,8 @@ public override IForLoopActionUsage Read(XmlReader xmiReader, Uri currentLocatio this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ForLoopActionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -560,7 +562,7 @@ public override IForLoopActionUsage Read(XmlReader xmiReader, Uri currentLocatio } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -581,7 +583,7 @@ public override IForLoopActionUsage Read(XmlReader xmiReader, Uri currentLocatio } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -650,6 +652,8 @@ public override async Task ReadAsync(XmlReader xmiReader, U this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ForLoopActionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1074,7 +1078,7 @@ public override async Task ReadAsync(XmlReader xmiReader, U } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1095,7 +1099,7 @@ public override async Task ReadAsync(XmlReader xmiReader, U } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ForkNodeReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ForkNodeReader.cs index 8b74189cc..388c4d705 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ForkNodeReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ForkNodeReader.cs @@ -89,7 +89,7 @@ public class ForkNodeReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ForkNodeReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ForkNodeReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -135,6 +135,8 @@ public override IForkNode Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ForkNode", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -559,7 +561,7 @@ public override IForkNode Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -580,7 +582,7 @@ public override IForkNode Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -649,6 +651,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri current this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ForkNode", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1073,7 +1077,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri current } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1094,7 +1098,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri current } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FramedConcernMembershipReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FramedConcernMembershipReader.cs index 1241d8d31..e1c07f8a0 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FramedConcernMembershipReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FramedConcernMembershipReader.cs @@ -66,7 +66,7 @@ public class FramedConcernMembershipReader : XmiDataReader /// The injected used to register and process external references /// The injected used to set up logging - public FramedConcernMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public FramedConcernMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override IFramedConcernMembership Read(XmlReader xmiReader, Uri currentLo this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FramedConcernMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -346,7 +348,7 @@ public override IFramedConcernMembership Read(XmlReader xmiReader, Uri currentLo } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -367,7 +369,7 @@ public override IFramedConcernMembership Read(XmlReader xmiReader, Uri currentLo } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -388,7 +390,7 @@ public override IFramedConcernMembership Read(XmlReader xmiReader, Uri currentLo } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -409,7 +411,7 @@ public override IFramedConcernMembership Read(XmlReader xmiReader, Uri currentLo } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -478,6 +480,8 @@ public override async Task ReadAsync(XmlReader xmiRead this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "FramedConcernMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -712,7 +716,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -733,7 +737,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -754,7 +758,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -775,7 +779,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FunctionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FunctionReader.cs index 46fbcf7d3..ac75412bb 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FunctionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/FunctionReader.cs @@ -65,7 +65,7 @@ public class FunctionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public FunctionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public FunctionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -111,6 +111,8 @@ public override IFunction Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Function", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -305,7 +307,7 @@ public override IFunction Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -326,7 +328,7 @@ public override IFunction Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -383,6 +385,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri current this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Function", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -577,7 +581,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri current } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -598,7 +602,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri current } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/IfActionUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/IfActionUsageReader.cs index 5a2e6ecf3..67811e63a 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/IfActionUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/IfActionUsageReader.cs @@ -90,7 +90,7 @@ public class IfActionUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public IfActionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public IfActionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -136,6 +136,8 @@ public override IIfActionUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "IfActionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -560,7 +562,7 @@ public override IIfActionUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -581,7 +583,7 @@ public override IIfActionUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -650,6 +652,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "IfActionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1074,7 +1078,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1095,7 +1099,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/IncludeUseCaseUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/IncludeUseCaseUsageReader.cs index 584468bd6..0599268f6 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/IncludeUseCaseUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/IncludeUseCaseUsageReader.cs @@ -90,7 +90,7 @@ public class IncludeUseCaseUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public IncludeUseCaseUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public IncludeUseCaseUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -136,6 +136,8 @@ public override IIncludeUseCaseUsage Read(XmlReader xmiReader, Uri currentLocati this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "IncludeUseCaseUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -560,7 +562,7 @@ public override IIncludeUseCaseUsage Read(XmlReader xmiReader, Uri currentLocati } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -581,7 +583,7 @@ public override IIncludeUseCaseUsage Read(XmlReader xmiReader, Uri currentLocati } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -650,6 +652,8 @@ public override async Task ReadAsync(XmlReader xmiReader, this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "IncludeUseCaseUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1074,7 +1078,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1095,7 +1099,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/IndexExpressionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/IndexExpressionReader.cs index b5a68f3bd..d5b4c8f0e 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/IndexExpressionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/IndexExpressionReader.cs @@ -66,7 +66,7 @@ public class IndexExpressionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public IndexExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public IndexExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override IIndexExpression Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "IndexExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -523,7 +525,7 @@ public override IIndexExpression Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -544,7 +546,7 @@ public override IIndexExpression Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -601,6 +603,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "IndexExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1012,7 +1016,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1033,7 +1037,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/InteractionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/InteractionReader.cs index 7e3040d98..f92062ac9 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/InteractionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/InteractionReader.cs @@ -66,7 +66,7 @@ public class InteractionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public InteractionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public InteractionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override IInteraction Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Interaction", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -358,7 +360,7 @@ public override IInteraction Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -379,7 +381,7 @@ public override IInteraction Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -400,7 +402,7 @@ public override IInteraction Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -421,7 +423,7 @@ public override IInteraction Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -478,6 +480,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Interaction", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -724,7 +728,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -745,7 +749,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -766,7 +770,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -787,7 +791,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curr } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/InterfaceDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/InterfaceDefinitionReader.cs index 05f047fcf..98de4139d 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/InterfaceDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/InterfaceDefinitionReader.cs @@ -86,7 +86,7 @@ public class InterfaceDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public InterfaceDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public InterfaceDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -132,6 +132,8 @@ public override IInterfaceDefinition Read(XmlReader xmiReader, Uri currentLocati this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "InterfaceDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -422,7 +424,7 @@ public override IInterfaceDefinition Read(XmlReader xmiReader, Uri currentLocati } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -443,7 +445,7 @@ public override IInterfaceDefinition Read(XmlReader xmiReader, Uri currentLocati } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -464,7 +466,7 @@ public override IInterfaceDefinition Read(XmlReader xmiReader, Uri currentLocati } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -485,7 +487,7 @@ public override IInterfaceDefinition Read(XmlReader xmiReader, Uri currentLocati } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -542,6 +544,8 @@ public override async Task ReadAsync(XmlReader xmiReader, this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "InterfaceDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -832,7 +836,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -853,7 +857,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -874,7 +878,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -895,7 +899,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/InterfaceUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/InterfaceUsageReader.cs index f01d8e912..8189fb2fc 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/InterfaceUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/InterfaceUsageReader.cs @@ -91,7 +91,7 @@ public class InterfaceUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public InterfaceUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public InterfaceUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -137,6 +137,8 @@ public override IInterfaceUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "InterfaceUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -613,7 +615,7 @@ public override IInterfaceUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -634,7 +636,7 @@ public override IInterfaceUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -655,7 +657,7 @@ public override IInterfaceUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -676,7 +678,7 @@ public override IInterfaceUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -745,6 +747,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "InterfaceUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1221,7 +1225,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -1242,7 +1246,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1263,7 +1267,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -1284,7 +1288,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/IntersectingReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/IntersectingReader.cs index 553fed90d..ea29fba2a 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/IntersectingReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/IntersectingReader.cs @@ -61,7 +61,7 @@ public class IntersectingReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public IntersectingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public IntersectingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -107,6 +107,8 @@ public override IIntersecting Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Intersecting", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -295,7 +297,7 @@ public override IIntersecting Read(XmlReader xmiReader, Uri currentLocation) } else { - var intersectingTypeValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var intersectingTypeValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.IntersectingType = intersectingTypeValue; } @@ -340,7 +342,7 @@ public override IIntersecting Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -361,7 +363,7 @@ public override IIntersecting Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -382,7 +384,7 @@ public override IIntersecting Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -403,7 +405,7 @@ public override IIntersecting Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -460,6 +462,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Intersecting", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -648,7 +652,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var intersectingTypeValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var intersectingTypeValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.IntersectingType = intersectingTypeValue; } @@ -693,7 +697,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -714,7 +718,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -735,7 +739,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -756,7 +760,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/InvariantReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/InvariantReader.cs index 8419fff0e..6f4dda851 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/InvariantReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/InvariantReader.cs @@ -65,7 +65,7 @@ public class InvariantReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public InvariantReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public InvariantReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -111,6 +111,8 @@ public override IInvariant Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Invariant", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -525,7 +527,7 @@ public override IInvariant Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -546,7 +548,7 @@ public override IInvariant Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -603,6 +605,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Invariant", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1017,7 +1021,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1038,7 +1042,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/InvocationExpressionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/InvocationExpressionReader.cs index c75147ba5..7a2e0728e 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/InvocationExpressionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/InvocationExpressionReader.cs @@ -66,7 +66,7 @@ public class InvocationExpressionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public InvocationExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public InvocationExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override IInvocationExpression Read(XmlReader xmiReader, Uri currentLocat this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "InvocationExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -504,7 +506,7 @@ public override IInvocationExpression Read(XmlReader xmiReader, Uri currentLocat } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -525,7 +527,7 @@ public override IInvocationExpression Read(XmlReader xmiReader, Uri currentLocat } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -582,6 +584,8 @@ public override async Task ReadAsync(XmlReader xmiReader, this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "InvocationExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -974,7 +978,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -995,7 +999,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ItemDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ItemDefinitionReader.cs index 371551f65..e70f7ed2d 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ItemDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ItemDefinitionReader.cs @@ -86,7 +86,7 @@ public class ItemDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ItemDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ItemDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -132,6 +132,8 @@ public override IItemDefinition Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ItemDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -370,7 +372,7 @@ public override IItemDefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -391,7 +393,7 @@ public override IItemDefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -448,6 +450,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ItemDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -686,7 +690,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -707,7 +711,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ItemUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ItemUsageReader.cs index a80dfd58b..8c9eba247 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ItemUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ItemUsageReader.cs @@ -89,7 +89,7 @@ public class ItemUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ItemUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ItemUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -135,6 +135,8 @@ public override IItemUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ItemUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -559,7 +561,7 @@ public override IItemUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -580,7 +582,7 @@ public override IItemUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -649,6 +651,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ItemUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1073,7 +1077,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1094,7 +1098,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/JoinNodeReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/JoinNodeReader.cs index 7dfcafad7..4dde20261 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/JoinNodeReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/JoinNodeReader.cs @@ -89,7 +89,7 @@ public class JoinNodeReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public JoinNodeReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public JoinNodeReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -135,6 +135,8 @@ public override IJoinNode Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "JoinNode", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -559,7 +561,7 @@ public override IJoinNode Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -580,7 +582,7 @@ public override IJoinNode Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -649,6 +651,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri current this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "JoinNode", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1073,7 +1077,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri current } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1094,7 +1098,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri current } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LibraryPackageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LibraryPackageReader.cs index e5412779c..09e6ca57a 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LibraryPackageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LibraryPackageReader.cs @@ -62,7 +62,7 @@ public class LibraryPackageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public LibraryPackageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public LibraryPackageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -108,6 +108,8 @@ public override ILibraryPackage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "LibraryPackage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -280,7 +282,7 @@ public override ILibraryPackage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -301,7 +303,7 @@ public override ILibraryPackage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -358,6 +360,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "LibraryPackage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -530,7 +534,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -551,7 +555,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralBooleanReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralBooleanReader.cs index a7a13c142..b250c703e 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralBooleanReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralBooleanReader.cs @@ -66,7 +66,7 @@ public class LiteralBooleanReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public LiteralBooleanReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public LiteralBooleanReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override ILiteralBoolean Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "LiteralBoolean", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -514,7 +516,7 @@ public override ILiteralBoolean Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -535,7 +537,7 @@ public override ILiteralBoolean Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -604,6 +606,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "LiteralBoolean", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1006,7 +1010,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1027,7 +1031,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralExpressionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralExpressionReader.cs index 5c9a513ce..eeb6ca8d6 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralExpressionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralExpressionReader.cs @@ -66,7 +66,7 @@ public class LiteralExpressionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public LiteralExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public LiteralExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override ILiteralExpression Read(XmlReader xmiReader, Uri currentLocation this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "LiteralExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -504,7 +506,7 @@ public override ILiteralExpression Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -525,7 +527,7 @@ public override ILiteralExpression Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -582,6 +584,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "LiteralExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -974,7 +978,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -995,7 +999,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralInfinityReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralInfinityReader.cs index b7064d4c4..8bd5913fc 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralInfinityReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralInfinityReader.cs @@ -66,7 +66,7 @@ public class LiteralInfinityReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public LiteralInfinityReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public LiteralInfinityReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override ILiteralInfinity Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "LiteralInfinity", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -504,7 +506,7 @@ public override ILiteralInfinity Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -525,7 +527,7 @@ public override ILiteralInfinity Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -582,6 +584,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "LiteralInfinity", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -974,7 +978,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -995,7 +999,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralIntegerReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralIntegerReader.cs index dfaf84eb0..80e2d97f7 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralIntegerReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralIntegerReader.cs @@ -66,7 +66,7 @@ public class LiteralIntegerReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public LiteralIntegerReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public LiteralIntegerReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override ILiteralInteger Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "LiteralInteger", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -514,7 +516,7 @@ public override ILiteralInteger Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -535,7 +537,7 @@ public override ILiteralInteger Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -604,6 +606,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "LiteralInteger", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1006,7 +1010,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1027,7 +1031,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralRationalReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralRationalReader.cs index 23c2276b3..03e6f6423 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralRationalReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralRationalReader.cs @@ -66,7 +66,7 @@ public class LiteralRationalReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public LiteralRationalReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public LiteralRationalReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override ILiteralRational Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "LiteralRational", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -514,7 +516,7 @@ public override ILiteralRational Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -535,7 +537,7 @@ public override ILiteralRational Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -604,6 +606,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "LiteralRational", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1006,7 +1010,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1027,7 +1031,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralStringReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralStringReader.cs index 9a5348467..8460c6eb6 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralStringReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/LiteralStringReader.cs @@ -66,7 +66,7 @@ public class LiteralStringReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public LiteralStringReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public LiteralStringReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override ILiteralString Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "LiteralString", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -511,7 +513,7 @@ public override ILiteralString Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -532,7 +534,7 @@ public override ILiteralString Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -601,6 +603,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "LiteralString", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1000,7 +1004,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1021,7 +1025,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MembershipExposeReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MembershipExposeReader.cs index 190e51c5b..ffb6c83e0 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MembershipExposeReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MembershipExposeReader.cs @@ -62,7 +62,7 @@ public class MembershipExposeReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public MembershipExposeReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public MembershipExposeReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -108,6 +108,8 @@ public override IMembershipExpose Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "MembershipExpose", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -326,7 +328,7 @@ public override IMembershipExpose Read(XmlReader xmiReader, Uri currentLocation) } else { - var importedMembershipValue = (IMembership)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var importedMembershipValue = (IMembership)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.ImportedMembership = importedMembershipValue; } @@ -395,7 +397,7 @@ public override IMembershipExpose Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -416,7 +418,7 @@ public override IMembershipExpose Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -437,7 +439,7 @@ public override IMembershipExpose Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -458,7 +460,7 @@ public override IMembershipExpose Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -527,6 +529,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "MembershipExpose", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -745,7 +749,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var importedMembershipValue = (IMembership)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var importedMembershipValue = (IMembership)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.ImportedMembership = importedMembershipValue; } @@ -814,7 +818,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -835,7 +839,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -856,7 +860,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -877,7 +881,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MembershipImportReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MembershipImportReader.cs index aa620872c..529f16caa 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MembershipImportReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MembershipImportReader.cs @@ -61,7 +61,7 @@ public class MembershipImportReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public MembershipImportReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public MembershipImportReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -107,6 +107,8 @@ public override IMembershipImport Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "MembershipImport", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -325,7 +327,7 @@ public override IMembershipImport Read(XmlReader xmiReader, Uri currentLocation) } else { - var importedMembershipValue = (IMembership)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var importedMembershipValue = (IMembership)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.ImportedMembership = importedMembershipValue; } @@ -394,7 +396,7 @@ public override IMembershipImport Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -415,7 +417,7 @@ public override IMembershipImport Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -436,7 +438,7 @@ public override IMembershipImport Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -457,7 +459,7 @@ public override IMembershipImport Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -526,6 +528,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "MembershipImport", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -744,7 +748,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var importedMembershipValue = (IMembership)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var importedMembershipValue = (IMembership)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.ImportedMembership = importedMembershipValue; } @@ -813,7 +817,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -834,7 +838,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -855,7 +859,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -876,7 +880,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MembershipReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MembershipReader.cs index 7bfacadba..82b386bf2 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MembershipReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MembershipReader.cs @@ -61,7 +61,7 @@ public class MembershipReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public MembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public MembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -107,6 +107,8 @@ public override IMembership Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Membership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -343,7 +345,7 @@ public override IMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var memberElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var memberElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.MemberElement = memberElementValue; } @@ -388,7 +390,7 @@ public override IMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -409,7 +411,7 @@ public override IMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -430,7 +432,7 @@ public override IMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -451,7 +453,7 @@ public override IMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -520,6 +522,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Membership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -756,7 +760,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var memberElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var memberElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.MemberElement = memberElementValue; } @@ -801,7 +805,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -822,7 +826,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -843,7 +847,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -864,7 +868,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MergeNodeReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MergeNodeReader.cs index a6861a7e5..e48bf552a 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MergeNodeReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MergeNodeReader.cs @@ -89,7 +89,7 @@ public class MergeNodeReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public MergeNodeReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public MergeNodeReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -135,6 +135,8 @@ public override IMergeNode Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "MergeNode", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -559,7 +561,7 @@ public override IMergeNode Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -580,7 +582,7 @@ public override IMergeNode Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -649,6 +651,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "MergeNode", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1073,7 +1077,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1094,7 +1098,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MetaclassReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MetaclassReader.cs index de6ddfe7f..d1d7721b7 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MetaclassReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MetaclassReader.cs @@ -65,7 +65,7 @@ public class MetaclassReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public MetaclassReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public MetaclassReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -111,6 +111,8 @@ public override IMetaclass Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Metaclass", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -305,7 +307,7 @@ public override IMetaclass Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -326,7 +328,7 @@ public override IMetaclass Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -383,6 +385,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Metaclass", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -577,7 +581,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -598,7 +602,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MetadataAccessExpressionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MetadataAccessExpressionReader.cs index 45f863ba8..5c4de7157 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MetadataAccessExpressionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MetadataAccessExpressionReader.cs @@ -66,7 +66,7 @@ public class MetadataAccessExpressionReader : XmiDataReader /// The injected used to register and process external references /// The injected used to set up logging - public MetadataAccessExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public MetadataAccessExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override IMetadataAccessExpression Read(XmlReader xmiReader, Uri currentL this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "MetadataAccessExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -504,7 +506,7 @@ public override IMetadataAccessExpression Read(XmlReader xmiReader, Uri currentL } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -525,7 +527,7 @@ public override IMetadataAccessExpression Read(XmlReader xmiReader, Uri currentL } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -582,6 +584,8 @@ public override async Task ReadAsync(XmlReader xmiRea this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "MetadataAccessExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -974,7 +978,7 @@ public override async Task ReadAsync(XmlReader xmiRea } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -995,7 +999,7 @@ public override async Task ReadAsync(XmlReader xmiRea } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MetadataDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MetadataDefinitionReader.cs index 56f92a2f3..5bdafe905 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MetadataDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MetadataDefinitionReader.cs @@ -86,7 +86,7 @@ public class MetadataDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public MetadataDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public MetadataDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -132,6 +132,8 @@ public override IMetadataDefinition Read(XmlReader xmiReader, Uri currentLocatio this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "MetadataDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -370,7 +372,7 @@ public override IMetadataDefinition Read(XmlReader xmiReader, Uri currentLocatio } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -391,7 +393,7 @@ public override IMetadataDefinition Read(XmlReader xmiReader, Uri currentLocatio } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -448,6 +450,8 @@ public override async Task ReadAsync(XmlReader xmiReader, U this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "MetadataDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -686,7 +690,7 @@ public override async Task ReadAsync(XmlReader xmiReader, U } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -707,7 +711,7 @@ public override async Task ReadAsync(XmlReader xmiReader, U } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MetadataFeatureReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MetadataFeatureReader.cs index 7f870e8dd..7a69a6b07 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MetadataFeatureReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MetadataFeatureReader.cs @@ -64,7 +64,7 @@ public class MetadataFeatureReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public MetadataFeatureReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public MetadataFeatureReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -110,6 +110,8 @@ public override IMetadataFeature Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "MetadataFeature", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -502,7 +504,7 @@ public override IMetadataFeature Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -523,7 +525,7 @@ public override IMetadataFeature Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -580,6 +582,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "MetadataFeature", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -972,7 +976,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -993,7 +997,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MetadataUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MetadataUsageReader.cs index 26282f0b3..84bb3799f 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MetadataUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MetadataUsageReader.cs @@ -90,7 +90,7 @@ public class MetadataUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public MetadataUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public MetadataUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -136,6 +136,8 @@ public override IMetadataUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "MetadataUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -560,7 +562,7 @@ public override IMetadataUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -581,7 +583,7 @@ public override IMetadataUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -650,6 +652,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "MetadataUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1074,7 +1078,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1095,7 +1099,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MultiplicityRangeReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MultiplicityRangeReader.cs index 85f674c48..04fd064a6 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MultiplicityRangeReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MultiplicityRangeReader.cs @@ -65,7 +65,7 @@ public class MultiplicityRangeReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public MultiplicityRangeReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public MultiplicityRangeReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -111,6 +111,8 @@ public override IMultiplicityRange Read(XmlReader xmiReader, Uri currentLocation this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "MultiplicityRange", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -503,7 +505,7 @@ public override IMultiplicityRange Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -524,7 +526,7 @@ public override IMultiplicityRange Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -581,6 +583,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "MultiplicityRange", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -973,7 +977,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -994,7 +998,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MultiplicityReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MultiplicityReader.cs index 935058c00..4e899b25f 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MultiplicityReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/MultiplicityReader.cs @@ -63,7 +63,7 @@ public class MultiplicityReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public MultiplicityReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public MultiplicityReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -109,6 +109,8 @@ public override IMultiplicity Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Multiplicity", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -501,7 +503,7 @@ public override IMultiplicity Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -522,7 +524,7 @@ public override IMultiplicity Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -579,6 +581,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Multiplicity", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -971,7 +975,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -992,7 +996,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/NamespaceExposeReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/NamespaceExposeReader.cs index 3c9bec70b..feabf7ff6 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/NamespaceExposeReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/NamespaceExposeReader.cs @@ -62,7 +62,7 @@ public class NamespaceExposeReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public NamespaceExposeReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public NamespaceExposeReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -108,6 +108,8 @@ public override INamespaceExpose Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "NamespaceExpose", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -326,7 +328,7 @@ public override INamespaceExpose Read(XmlReader xmiReader, Uri currentLocation) } else { - var importedNamespaceValue = (INamespace)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var importedNamespaceValue = (INamespace)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.ImportedNamespace = importedNamespaceValue; } @@ -395,7 +397,7 @@ public override INamespaceExpose Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -416,7 +418,7 @@ public override INamespaceExpose Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -437,7 +439,7 @@ public override INamespaceExpose Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -458,7 +460,7 @@ public override INamespaceExpose Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -527,6 +529,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "NamespaceExpose", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -745,7 +749,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var importedNamespaceValue = (INamespace)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var importedNamespaceValue = (INamespace)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.ImportedNamespace = importedNamespaceValue; } @@ -814,7 +818,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -835,7 +839,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -856,7 +860,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -877,7 +881,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/NamespaceImportReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/NamespaceImportReader.cs index 351693382..353fed585 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/NamespaceImportReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/NamespaceImportReader.cs @@ -61,7 +61,7 @@ public class NamespaceImportReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public NamespaceImportReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public NamespaceImportReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -107,6 +107,8 @@ public override INamespaceImport Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "NamespaceImport", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -325,7 +327,7 @@ public override INamespaceImport Read(XmlReader xmiReader, Uri currentLocation) } else { - var importedNamespaceValue = (INamespace)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var importedNamespaceValue = (INamespace)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.ImportedNamespace = importedNamespaceValue; } @@ -394,7 +396,7 @@ public override INamespaceImport Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -415,7 +417,7 @@ public override INamespaceImport Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -436,7 +438,7 @@ public override INamespaceImport Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -457,7 +459,7 @@ public override INamespaceImport Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -526,6 +528,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "NamespaceImport", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -744,7 +748,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var importedNamespaceValue = (INamespace)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var importedNamespaceValue = (INamespace)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.ImportedNamespace = importedNamespaceValue; } @@ -813,7 +817,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -834,7 +838,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -855,7 +859,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -876,7 +880,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/NamespaceReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/NamespaceReader.cs index c3f99b707..c7d8b3683 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/NamespaceReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/NamespaceReader.cs @@ -60,7 +60,7 @@ public class NamespaceReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public NamespaceReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public NamespaceReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -106,6 +106,8 @@ public override INamespace Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Namespace", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -256,7 +258,7 @@ public override INamespace Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -277,7 +279,7 @@ public override INamespace Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -334,6 +336,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Namespace", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -484,7 +488,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -505,7 +509,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/NullExpressionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/NullExpressionReader.cs index 4e9cf84f6..808b70160 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/NullExpressionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/NullExpressionReader.cs @@ -66,7 +66,7 @@ public class NullExpressionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public NullExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public NullExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override INullExpression Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "NullExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -504,7 +506,7 @@ public override INullExpression Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -525,7 +527,7 @@ public override INullExpression Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -582,6 +584,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "NullExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -974,7 +978,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -995,7 +999,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ObjectiveMembershipReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ObjectiveMembershipReader.cs index 96d216cf0..f3513bdff 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ObjectiveMembershipReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ObjectiveMembershipReader.cs @@ -65,7 +65,7 @@ public class ObjectiveMembershipReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ObjectiveMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ObjectiveMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -111,6 +111,8 @@ public override IObjectiveMembership Read(XmlReader xmiReader, Uri currentLocati this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ObjectiveMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -323,7 +325,7 @@ public override IObjectiveMembership Read(XmlReader xmiReader, Uri currentLocati } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -344,7 +346,7 @@ public override IObjectiveMembership Read(XmlReader xmiReader, Uri currentLocati } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -365,7 +367,7 @@ public override IObjectiveMembership Read(XmlReader xmiReader, Uri currentLocati } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -386,7 +388,7 @@ public override IObjectiveMembership Read(XmlReader xmiReader, Uri currentLocati } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -455,6 +457,8 @@ public override async Task ReadAsync(XmlReader xmiReader, this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ObjectiveMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -667,7 +671,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -688,7 +692,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -709,7 +713,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -730,7 +734,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/OccurrenceDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/OccurrenceDefinitionReader.cs index 003c2b789..75af87f1c 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/OccurrenceDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/OccurrenceDefinitionReader.cs @@ -86,7 +86,7 @@ public class OccurrenceDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public OccurrenceDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public OccurrenceDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -132,6 +132,8 @@ public override IOccurrenceDefinition Read(XmlReader xmiReader, Uri currentLocat this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "OccurrenceDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -370,7 +372,7 @@ public override IOccurrenceDefinition Read(XmlReader xmiReader, Uri currentLocat } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -391,7 +393,7 @@ public override IOccurrenceDefinition Read(XmlReader xmiReader, Uri currentLocat } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -448,6 +450,8 @@ public override async Task ReadAsync(XmlReader xmiReader, this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "OccurrenceDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -686,7 +690,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -707,7 +711,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/OccurrenceUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/OccurrenceUsageReader.cs index 0bfff368b..88b5dffb7 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/OccurrenceUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/OccurrenceUsageReader.cs @@ -88,7 +88,7 @@ public class OccurrenceUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public OccurrenceUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public OccurrenceUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -134,6 +134,8 @@ public override IOccurrenceUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "OccurrenceUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -558,7 +560,7 @@ public override IOccurrenceUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -579,7 +581,7 @@ public override IOccurrenceUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -648,6 +650,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "OccurrenceUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1072,7 +1076,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1093,7 +1097,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/OperatorExpressionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/OperatorExpressionReader.cs index 3220900c9..416593639 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/OperatorExpressionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/OperatorExpressionReader.cs @@ -66,7 +66,7 @@ public class OperatorExpressionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public OperatorExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public OperatorExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override IOperatorExpression Read(XmlReader xmiReader, Uri currentLocatio this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "OperatorExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -523,7 +525,7 @@ public override IOperatorExpression Read(XmlReader xmiReader, Uri currentLocatio } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -544,7 +546,7 @@ public override IOperatorExpression Read(XmlReader xmiReader, Uri currentLocatio } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -601,6 +603,8 @@ public override async Task ReadAsync(XmlReader xmiReader, U this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "OperatorExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1012,7 +1016,7 @@ public override async Task ReadAsync(XmlReader xmiReader, U } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1033,7 +1037,7 @@ public override async Task ReadAsync(XmlReader xmiReader, U } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/OwningMembershipReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/OwningMembershipReader.cs index f0bc91898..cc7e22998 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/OwningMembershipReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/OwningMembershipReader.cs @@ -61,7 +61,7 @@ public class OwningMembershipReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public OwningMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public OwningMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -107,6 +107,8 @@ public override IOwningMembership Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "OwningMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -319,7 +321,7 @@ public override IOwningMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -340,7 +342,7 @@ public override IOwningMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -361,7 +363,7 @@ public override IOwningMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -382,7 +384,7 @@ public override IOwningMembership Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -451,6 +453,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "OwningMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -663,7 +667,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -684,7 +688,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -705,7 +709,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -726,7 +730,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PackageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PackageReader.cs index 0bfa3e5dc..76defa21d 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PackageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PackageReader.cs @@ -62,7 +62,7 @@ public class PackageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public PackageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public PackageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -108,6 +108,8 @@ public override IPackage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Package", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -258,7 +260,7 @@ public override IPackage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -279,7 +281,7 @@ public override IPackage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -336,6 +338,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentL this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Package", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -486,7 +490,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentL } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -507,7 +511,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentL } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ParameterMembershipReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ParameterMembershipReader.cs index 272a25a82..713b3338a 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ParameterMembershipReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ParameterMembershipReader.cs @@ -64,7 +64,7 @@ public class ParameterMembershipReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ParameterMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ParameterMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -110,6 +110,8 @@ public override IParameterMembership Read(XmlReader xmiReader, Uri currentLocati this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ParameterMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -322,7 +324,7 @@ public override IParameterMembership Read(XmlReader xmiReader, Uri currentLocati } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -343,7 +345,7 @@ public override IParameterMembership Read(XmlReader xmiReader, Uri currentLocati } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -364,7 +366,7 @@ public override IParameterMembership Read(XmlReader xmiReader, Uri currentLocati } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -385,7 +387,7 @@ public override IParameterMembership Read(XmlReader xmiReader, Uri currentLocati } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -454,6 +456,8 @@ public override async Task ReadAsync(XmlReader xmiReader, this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ParameterMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -666,7 +670,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -687,7 +691,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -708,7 +712,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -729,7 +733,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PartDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PartDefinitionReader.cs index 8fd555ef6..be58de6e4 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PartDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PartDefinitionReader.cs @@ -85,7 +85,7 @@ public class PartDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public PartDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public PartDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -131,6 +131,8 @@ public override IPartDefinition Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "PartDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -369,7 +371,7 @@ public override IPartDefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -390,7 +392,7 @@ public override IPartDefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -447,6 +449,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "PartDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -685,7 +689,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -706,7 +710,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PartUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PartUsageReader.cs index cb3b8c47a..060f30956 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PartUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PartUsageReader.cs @@ -89,7 +89,7 @@ public class PartUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public PartUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public PartUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -135,6 +135,8 @@ public override IPartUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "PartUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -559,7 +561,7 @@ public override IPartUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -580,7 +582,7 @@ public override IPartUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -649,6 +651,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "PartUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1073,7 +1077,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1094,7 +1098,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PayloadFeatureReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PayloadFeatureReader.cs index bcecdd87f..d5f6bb908 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PayloadFeatureReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PayloadFeatureReader.cs @@ -64,7 +64,7 @@ public class PayloadFeatureReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public PayloadFeatureReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public PayloadFeatureReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -110,6 +110,8 @@ public override IPayloadFeature Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "PayloadFeature", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -502,7 +504,7 @@ public override IPayloadFeature Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -523,7 +525,7 @@ public override IPayloadFeature Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -580,6 +582,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "PayloadFeature", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -972,7 +976,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -993,7 +997,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PerformActionUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PerformActionUsageReader.cs index a90f7e585..5d470a655 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PerformActionUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PerformActionUsageReader.cs @@ -89,7 +89,7 @@ public class PerformActionUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public PerformActionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public PerformActionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -135,6 +135,8 @@ public override IPerformActionUsage Read(XmlReader xmiReader, Uri currentLocatio this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "PerformActionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -559,7 +561,7 @@ public override IPerformActionUsage Read(XmlReader xmiReader, Uri currentLocatio } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -580,7 +582,7 @@ public override IPerformActionUsage Read(XmlReader xmiReader, Uri currentLocatio } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -649,6 +651,8 @@ public override async Task ReadAsync(XmlReader xmiReader, U this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "PerformActionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1073,7 +1077,7 @@ public override async Task ReadAsync(XmlReader xmiReader, U } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1094,7 +1098,7 @@ public override async Task ReadAsync(XmlReader xmiReader, U } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PortConjugationReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PortConjugationReader.cs index da6cf3bbb..a244c3b3d 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PortConjugationReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PortConjugationReader.cs @@ -62,7 +62,7 @@ public class PortConjugationReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public PortConjugationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public PortConjugationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -108,6 +108,8 @@ public override IPortConjugation Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "PortConjugation", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -270,7 +272,7 @@ public override IPortConjugation Read(XmlReader xmiReader, Uri currentLocation) } else { - var conjugatedTypeValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var conjugatedTypeValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.ConjugatedType = conjugatedTypeValue; } @@ -351,7 +353,7 @@ public override IPortConjugation Read(XmlReader xmiReader, Uri currentLocation) } else { - var originalPortDefinitionValue = (IPortDefinition)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var originalPortDefinitionValue = (IPortDefinition)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.OriginalPortDefinition = originalPortDefinitionValue; } @@ -372,7 +374,7 @@ public override IPortConjugation Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -393,7 +395,7 @@ public override IPortConjugation Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -414,7 +416,7 @@ public override IPortConjugation Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -435,7 +437,7 @@ public override IPortConjugation Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -492,6 +494,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "PortConjugation", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -654,7 +658,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var conjugatedTypeValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var conjugatedTypeValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.ConjugatedType = conjugatedTypeValue; } @@ -735,7 +739,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var originalPortDefinitionValue = (IPortDefinition)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var originalPortDefinitionValue = (IPortDefinition)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.OriginalPortDefinition = originalPortDefinitionValue; } @@ -756,7 +760,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -777,7 +781,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -798,7 +802,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -819,7 +823,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PortDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PortDefinitionReader.cs index 139542364..8d13820b8 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PortDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PortDefinitionReader.cs @@ -86,7 +86,7 @@ public class PortDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public PortDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public PortDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -132,6 +132,8 @@ public override IPortDefinition Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "PortDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -370,7 +372,7 @@ public override IPortDefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -391,7 +393,7 @@ public override IPortDefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -448,6 +450,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "PortDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -686,7 +690,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -707,7 +711,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PortUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PortUsageReader.cs index 2b06f7d45..b5f047cd3 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PortUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PortUsageReader.cs @@ -88,7 +88,7 @@ public class PortUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public PortUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public PortUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -134,6 +134,8 @@ public override IPortUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "PortUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -558,7 +560,7 @@ public override IPortUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -579,7 +581,7 @@ public override IPortUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -648,6 +650,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "PortUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1072,7 +1076,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1093,7 +1097,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PredicateReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PredicateReader.cs index 2c792dda1..2fa1214bc 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PredicateReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/PredicateReader.cs @@ -65,7 +65,7 @@ public class PredicateReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public PredicateReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public PredicateReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -111,6 +111,8 @@ public override IPredicate Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Predicate", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -305,7 +307,7 @@ public override IPredicate Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -326,7 +328,7 @@ public override IPredicate Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -383,6 +385,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Predicate", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -577,7 +581,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -598,7 +602,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RedefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RedefinitionReader.cs index c4214289e..0e3ec10f4 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RedefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RedefinitionReader.cs @@ -62,7 +62,7 @@ public class RedefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public RedefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public RedefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -108,6 +108,8 @@ public override IRedefinition Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Redefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -330,7 +332,7 @@ public override IRedefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -351,7 +353,7 @@ public override IRedefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -372,7 +374,7 @@ public override IRedefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -393,7 +395,7 @@ public override IRedefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -414,7 +416,7 @@ public override IRedefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var redefinedFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var redefinedFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.RedefinedFeature = redefinedFeatureValue; } @@ -435,7 +437,7 @@ public override IRedefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var redefiningFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var redefiningFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.RedefiningFeature = redefiningFeatureValue; } @@ -492,6 +494,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Redefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -714,7 +718,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -735,7 +739,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -756,7 +760,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -777,7 +781,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -798,7 +802,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var redefinedFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var redefinedFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.RedefinedFeature = redefinedFeatureValue; } @@ -819,7 +823,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var redefiningFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var redefiningFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.RedefiningFeature = redefiningFeatureValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ReferenceSubsettingReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ReferenceSubsettingReader.cs index 76d4b283b..2485b6cdc 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ReferenceSubsettingReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ReferenceSubsettingReader.cs @@ -62,7 +62,7 @@ public class ReferenceSubsettingReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ReferenceSubsettingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ReferenceSubsettingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -108,6 +108,8 @@ public override IReferenceSubsetting Read(XmlReader xmiReader, Uri currentLocati this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ReferenceSubsetting", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -320,7 +322,7 @@ public override IReferenceSubsetting Read(XmlReader xmiReader, Uri currentLocati } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -341,7 +343,7 @@ public override IReferenceSubsetting Read(XmlReader xmiReader, Uri currentLocati } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -362,7 +364,7 @@ public override IReferenceSubsetting Read(XmlReader xmiReader, Uri currentLocati } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -383,7 +385,7 @@ public override IReferenceSubsetting Read(XmlReader xmiReader, Uri currentLocati } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -404,7 +406,7 @@ public override IReferenceSubsetting Read(XmlReader xmiReader, Uri currentLocati } else { - var referencedFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var referencedFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.ReferencedFeature = referencedFeatureValue; } @@ -461,6 +463,8 @@ public override async Task ReadAsync(XmlReader xmiReader, this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ReferenceSubsetting", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -673,7 +677,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -694,7 +698,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -715,7 +719,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -736,7 +740,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -757,7 +761,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var referencedFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var referencedFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.ReferencedFeature = referencedFeatureValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ReferenceUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ReferenceUsageReader.cs index baa9bd486..942dd75d2 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ReferenceUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ReferenceUsageReader.cs @@ -86,7 +86,7 @@ public class ReferenceUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ReferenceUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ReferenceUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -132,6 +132,8 @@ public override IReferenceUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ReferenceUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -524,7 +526,7 @@ public override IReferenceUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -545,7 +547,7 @@ public override IReferenceUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -602,6 +604,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ReferenceUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -994,7 +998,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1015,7 +1019,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RenderingDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RenderingDefinitionReader.cs index 82678661d..c13d82102 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RenderingDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RenderingDefinitionReader.cs @@ -85,7 +85,7 @@ public class RenderingDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public RenderingDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public RenderingDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -131,6 +131,8 @@ public override IRenderingDefinition Read(XmlReader xmiReader, Uri currentLocati this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "RenderingDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -369,7 +371,7 @@ public override IRenderingDefinition Read(XmlReader xmiReader, Uri currentLocati } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -390,7 +392,7 @@ public override IRenderingDefinition Read(XmlReader xmiReader, Uri currentLocati } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -447,6 +449,8 @@ public override async Task ReadAsync(XmlReader xmiReader, this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "RenderingDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -685,7 +689,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -706,7 +710,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RenderingUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RenderingUsageReader.cs index ba26737ee..c2b8babf4 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RenderingUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RenderingUsageReader.cs @@ -89,7 +89,7 @@ public class RenderingUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public RenderingUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public RenderingUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -135,6 +135,8 @@ public override IRenderingUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "RenderingUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -559,7 +561,7 @@ public override IRenderingUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -580,7 +582,7 @@ public override IRenderingUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -649,6 +651,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "RenderingUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1073,7 +1077,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1094,7 +1098,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RequirementConstraintMembershipReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RequirementConstraintMembershipReader.cs index 4e2faca30..35b41e78e 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RequirementConstraintMembershipReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RequirementConstraintMembershipReader.cs @@ -66,7 +66,7 @@ public class RequirementConstraintMembershipReader : XmiDataReader /// The injected used to register and process external references /// The injected used to set up logging - public RequirementConstraintMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public RequirementConstraintMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override IRequirementConstraintMembership Read(XmlReader xmiReader, Uri c this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "RequirementConstraintMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -346,7 +348,7 @@ public override IRequirementConstraintMembership Read(XmlReader xmiReader, Uri c } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -367,7 +369,7 @@ public override IRequirementConstraintMembership Read(XmlReader xmiReader, Uri c } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -388,7 +390,7 @@ public override IRequirementConstraintMembership Read(XmlReader xmiReader, Uri c } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -409,7 +411,7 @@ public override IRequirementConstraintMembership Read(XmlReader xmiReader, Uri c } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -478,6 +480,8 @@ public override async Task ReadAsync(XmlReader this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "RequirementConstraintMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -712,7 +716,7 @@ public override async Task ReadAsync(XmlReader } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -733,7 +737,7 @@ public override async Task ReadAsync(XmlReader } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -754,7 +758,7 @@ public override async Task ReadAsync(XmlReader } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -775,7 +779,7 @@ public override async Task ReadAsync(XmlReader } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RequirementDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RequirementDefinitionReader.cs index 50062fe29..49a49c969 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RequirementDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RequirementDefinitionReader.cs @@ -87,7 +87,7 @@ public class RequirementDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public RequirementDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public RequirementDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -133,6 +133,8 @@ public override IRequirementDefinition Read(XmlReader xmiReader, Uri currentLoca this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "RequirementDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -359,7 +361,7 @@ public override IRequirementDefinition Read(XmlReader xmiReader, Uri currentLoca } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -380,7 +382,7 @@ public override IRequirementDefinition Read(XmlReader xmiReader, Uri currentLoca } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -449,6 +451,8 @@ public override async Task ReadAsync(XmlReader xmiReader this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "RequirementDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -675,7 +679,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -696,7 +700,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RequirementUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RequirementUsageReader.cs index 1d7fbe4d0..c1c955215 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RequirementUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RequirementUsageReader.cs @@ -90,7 +90,7 @@ public class RequirementUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public RequirementUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public RequirementUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -136,6 +136,8 @@ public override IRequirementUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "RequirementUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -548,7 +550,7 @@ public override IRequirementUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -569,7 +571,7 @@ public override IRequirementUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -650,6 +652,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "RequirementUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1062,7 +1066,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1083,7 +1087,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RequirementVerificationMembershipReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RequirementVerificationMembershipReader.cs index 508ec542c..a494efa22 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RequirementVerificationMembershipReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/RequirementVerificationMembershipReader.cs @@ -67,7 +67,7 @@ public class RequirementVerificationMembershipReader : XmiDataReader /// The injected used to register and process external references /// The injected used to set up logging - public RequirementVerificationMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public RequirementVerificationMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -113,6 +113,8 @@ public override IRequirementVerificationMembership Read(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "RequirementVerificationMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -347,7 +349,7 @@ public override IRequirementVerificationMembership Read(XmlReader xmiReader, Uri } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -368,7 +370,7 @@ public override IRequirementVerificationMembership Read(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -389,7 +391,7 @@ public override IRequirementVerificationMembership Read(XmlReader xmiReader, Uri } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -410,7 +412,7 @@ public override IRequirementVerificationMembership Read(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -479,6 +481,8 @@ public override async Task ReadAsync(XmlRead this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "RequirementVerificationMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -713,7 +717,7 @@ public override async Task ReadAsync(XmlRead } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -734,7 +738,7 @@ public override async Task ReadAsync(XmlRead } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -755,7 +759,7 @@ public override async Task ReadAsync(XmlRead } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -776,7 +780,7 @@ public override async Task ReadAsync(XmlRead } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ResultExpressionMembershipReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ResultExpressionMembershipReader.cs index 58df252ca..0f5f6b317 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ResultExpressionMembershipReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ResultExpressionMembershipReader.cs @@ -64,7 +64,7 @@ public class ResultExpressionMembershipReader : XmiDataReader /// The injected used to register and process external references /// The injected used to set up logging - public ResultExpressionMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ResultExpressionMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -110,6 +110,8 @@ public override IResultExpressionMembership Read(XmlReader xmiReader, Uri curren this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ResultExpressionMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -322,7 +324,7 @@ public override IResultExpressionMembership Read(XmlReader xmiReader, Uri curren } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -343,7 +345,7 @@ public override IResultExpressionMembership Read(XmlReader xmiReader, Uri curren } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -364,7 +366,7 @@ public override IResultExpressionMembership Read(XmlReader xmiReader, Uri curren } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -385,7 +387,7 @@ public override IResultExpressionMembership Read(XmlReader xmiReader, Uri curren } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -454,6 +456,8 @@ public override async Task ReadAsync(XmlReader xmiR this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ResultExpressionMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -666,7 +670,7 @@ public override async Task ReadAsync(XmlReader xmiR } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -687,7 +691,7 @@ public override async Task ReadAsync(XmlReader xmiR } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -708,7 +712,7 @@ public override async Task ReadAsync(XmlReader xmiR } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -729,7 +733,7 @@ public override async Task ReadAsync(XmlReader xmiR } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ReturnParameterMembershipReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ReturnParameterMembershipReader.cs index fef0ea8b6..6a9c96fe6 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ReturnParameterMembershipReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ReturnParameterMembershipReader.cs @@ -65,7 +65,7 @@ public class ReturnParameterMembershipReader : XmiDataReader /// The injected used to register and process external references /// The injected used to set up logging - public ReturnParameterMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ReturnParameterMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -111,6 +111,8 @@ public override IReturnParameterMembership Read(XmlReader xmiReader, Uri current this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ReturnParameterMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -323,7 +325,7 @@ public override IReturnParameterMembership Read(XmlReader xmiReader, Uri current } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -344,7 +346,7 @@ public override IReturnParameterMembership Read(XmlReader xmiReader, Uri current } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -365,7 +367,7 @@ public override IReturnParameterMembership Read(XmlReader xmiReader, Uri current } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -386,7 +388,7 @@ public override IReturnParameterMembership Read(XmlReader xmiReader, Uri current } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -455,6 +457,8 @@ public override async Task ReadAsync(XmlReader xmiRe this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ReturnParameterMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -667,7 +671,7 @@ public override async Task ReadAsync(XmlReader xmiRe } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -688,7 +692,7 @@ public override async Task ReadAsync(XmlReader xmiRe } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -709,7 +713,7 @@ public override async Task ReadAsync(XmlReader xmiRe } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -730,7 +734,7 @@ public override async Task ReadAsync(XmlReader xmiRe } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SatisfyRequirementUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SatisfyRequirementUsageReader.cs index ccfc054bf..5c4937331 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SatisfyRequirementUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SatisfyRequirementUsageReader.cs @@ -90,7 +90,7 @@ public class SatisfyRequirementUsageReader : XmiDataReader /// The injected used to register and process external references /// The injected used to set up logging - public SatisfyRequirementUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public SatisfyRequirementUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -136,6 +136,8 @@ public override ISatisfyRequirementUsage Read(XmlReader xmiReader, Uri currentLo this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "SatisfyRequirementUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -570,7 +572,7 @@ public override ISatisfyRequirementUsage Read(XmlReader xmiReader, Uri currentLo } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -591,7 +593,7 @@ public override ISatisfyRequirementUsage Read(XmlReader xmiReader, Uri currentLo } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -672,6 +674,8 @@ public override async Task ReadAsync(XmlReader xmiRead this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "SatisfyRequirementUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1106,7 +1110,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1127,7 +1131,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SelectExpressionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SelectExpressionReader.cs index b8859ceea..5df7f8914 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SelectExpressionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SelectExpressionReader.cs @@ -66,7 +66,7 @@ public class SelectExpressionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public SelectExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public SelectExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override ISelectExpression Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "SelectExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -523,7 +525,7 @@ public override ISelectExpression Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -544,7 +546,7 @@ public override ISelectExpression Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -601,6 +603,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "SelectExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1012,7 +1016,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1033,7 +1037,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SendActionUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SendActionUsageReader.cs index 2abb0b9a2..e612b0c4b 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SendActionUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SendActionUsageReader.cs @@ -90,7 +90,7 @@ public class SendActionUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public SendActionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public SendActionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -136,6 +136,8 @@ public override ISendActionUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "SendActionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -560,7 +562,7 @@ public override ISendActionUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -581,7 +583,7 @@ public override ISendActionUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -650,6 +652,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "SendActionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1074,7 +1078,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1095,7 +1099,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SpecializationReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SpecializationReader.cs index 174b5f84b..a0b16603c 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SpecializationReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SpecializationReader.cs @@ -61,7 +61,7 @@ public class SpecializationReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public SpecializationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public SpecializationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -107,6 +107,8 @@ public override ISpecialization Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Specialization", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -305,7 +307,7 @@ public override ISpecialization Read(XmlReader xmiReader, Uri currentLocation) } else { - var generalValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var generalValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.General = generalValue; } @@ -350,7 +352,7 @@ public override ISpecialization Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -371,7 +373,7 @@ public override ISpecialization Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -392,7 +394,7 @@ public override ISpecialization Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -413,7 +415,7 @@ public override ISpecialization Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -434,7 +436,7 @@ public override ISpecialization Read(XmlReader xmiReader, Uri currentLocation) } else { - var specificValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var specificValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Specific = specificValue; } @@ -491,6 +493,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Specialization", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -689,7 +693,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var generalValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var generalValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.General = generalValue; } @@ -734,7 +738,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -755,7 +759,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -776,7 +780,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -797,7 +801,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -818,7 +822,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var specificValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var specificValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Specific = specificValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StakeholderMembershipReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StakeholderMembershipReader.cs index 4d02154db..ce4831175 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StakeholderMembershipReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StakeholderMembershipReader.cs @@ -66,7 +66,7 @@ public class StakeholderMembershipReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public StakeholderMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public StakeholderMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override IStakeholderMembership Read(XmlReader xmiReader, Uri currentLoca this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "StakeholderMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -324,7 +326,7 @@ public override IStakeholderMembership Read(XmlReader xmiReader, Uri currentLoca } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -345,7 +347,7 @@ public override IStakeholderMembership Read(XmlReader xmiReader, Uri currentLoca } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -366,7 +368,7 @@ public override IStakeholderMembership Read(XmlReader xmiReader, Uri currentLoca } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -387,7 +389,7 @@ public override IStakeholderMembership Read(XmlReader xmiReader, Uri currentLoca } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -456,6 +458,8 @@ public override async Task ReadAsync(XmlReader xmiReader this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "StakeholderMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -668,7 +672,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -689,7 +693,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -710,7 +714,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -731,7 +735,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StateDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StateDefinitionReader.cs index a225dd9a3..8e280f8a9 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StateDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StateDefinitionReader.cs @@ -86,7 +86,7 @@ public class StateDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public StateDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public StateDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -132,6 +132,8 @@ public override IStateDefinition Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "StateDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -392,7 +394,7 @@ public override IStateDefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -413,7 +415,7 @@ public override IStateDefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -470,6 +472,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "StateDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -730,7 +734,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -751,7 +755,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StateSubactionMembershipReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StateSubactionMembershipReader.cs index 32412b6ce..4f44ca63d 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StateSubactionMembershipReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StateSubactionMembershipReader.cs @@ -66,7 +66,7 @@ public class StateSubactionMembershipReader : XmiDataReader /// The injected used to register and process external references /// The injected used to set up logging - public StateSubactionMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public StateSubactionMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override IStateSubactionMembership Read(XmlReader xmiReader, Uri currentL this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "StateSubactionMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -346,7 +348,7 @@ public override IStateSubactionMembership Read(XmlReader xmiReader, Uri currentL } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -367,7 +369,7 @@ public override IStateSubactionMembership Read(XmlReader xmiReader, Uri currentL } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -388,7 +390,7 @@ public override IStateSubactionMembership Read(XmlReader xmiReader, Uri currentL } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -409,7 +411,7 @@ public override IStateSubactionMembership Read(XmlReader xmiReader, Uri currentL } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -478,6 +480,8 @@ public override async Task ReadAsync(XmlReader xmiRea this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "StateSubactionMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -712,7 +716,7 @@ public override async Task ReadAsync(XmlReader xmiRea } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -733,7 +737,7 @@ public override async Task ReadAsync(XmlReader xmiRea } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -754,7 +758,7 @@ public override async Task ReadAsync(XmlReader xmiRea } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -775,7 +779,7 @@ public override async Task ReadAsync(XmlReader xmiRea } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StateUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StateUsageReader.cs index 97c2fdddf..a820b8387 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StateUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StateUsageReader.cs @@ -89,7 +89,7 @@ public class StateUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public StateUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public StateUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -135,6 +135,8 @@ public override IStateUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "StateUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -581,7 +583,7 @@ public override IStateUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -602,7 +604,7 @@ public override IStateUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -671,6 +673,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "StateUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1117,7 +1121,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1138,7 +1142,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StepReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StepReader.cs index dc74613c9..3269930e8 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StepReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StepReader.cs @@ -64,7 +64,7 @@ public class StepReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public StepReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public StepReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -110,6 +110,8 @@ public override IStep Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Step", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -502,7 +504,7 @@ public override IStep Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -523,7 +525,7 @@ public override IStep Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -580,6 +582,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoca this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Step", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -972,7 +976,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoca } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -993,7 +997,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoca } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StructureReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StructureReader.cs index fd2bf85e6..fdead9644 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StructureReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/StructureReader.cs @@ -65,7 +65,7 @@ public class StructureReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public StructureReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public StructureReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -111,6 +111,8 @@ public override IStructure Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Structure", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -305,7 +307,7 @@ public override IStructure Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -326,7 +328,7 @@ public override IStructure Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -383,6 +385,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Structure", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -577,7 +581,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -598,7 +602,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SubclassificationReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SubclassificationReader.cs index 5b4418ba0..b31689e64 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SubclassificationReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SubclassificationReader.cs @@ -62,7 +62,7 @@ public class SubclassificationReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public SubclassificationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public SubclassificationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -108,6 +108,8 @@ public override ISubclassification Read(XmlReader xmiReader, Uri currentLocation this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Subclassification", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -330,7 +332,7 @@ public override ISubclassification Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -351,7 +353,7 @@ public override ISubclassification Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -372,7 +374,7 @@ public override ISubclassification Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -393,7 +395,7 @@ public override ISubclassification Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -414,7 +416,7 @@ public override ISubclassification Read(XmlReader xmiReader, Uri currentLocation } else { - var subclassifierValue = (IClassifier)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var subclassifierValue = (IClassifier)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Subclassifier = subclassifierValue; } @@ -435,7 +437,7 @@ public override ISubclassification Read(XmlReader xmiReader, Uri currentLocation } else { - var superclassifierValue = (IClassifier)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var superclassifierValue = (IClassifier)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Superclassifier = superclassifierValue; } @@ -492,6 +494,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Subclassification", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -714,7 +718,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -735,7 +739,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -756,7 +760,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -777,7 +781,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -798,7 +802,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var subclassifierValue = (IClassifier)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var subclassifierValue = (IClassifier)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Subclassifier = subclassifierValue; } @@ -819,7 +823,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var superclassifierValue = (IClassifier)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var superclassifierValue = (IClassifier)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.Superclassifier = superclassifierValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SubjectMembershipReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SubjectMembershipReader.cs index 18008a8af..75b265573 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SubjectMembershipReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SubjectMembershipReader.cs @@ -66,7 +66,7 @@ public class SubjectMembershipReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public SubjectMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public SubjectMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override ISubjectMembership Read(XmlReader xmiReader, Uri currentLocation this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "SubjectMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -324,7 +326,7 @@ public override ISubjectMembership Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -345,7 +347,7 @@ public override ISubjectMembership Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -366,7 +368,7 @@ public override ISubjectMembership Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -387,7 +389,7 @@ public override ISubjectMembership Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -456,6 +458,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "SubjectMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -668,7 +672,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -689,7 +693,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -710,7 +714,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -731,7 +735,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SubsettingReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SubsettingReader.cs index e792edb14..84ba820da 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SubsettingReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SubsettingReader.cs @@ -62,7 +62,7 @@ public class SubsettingReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public SubsettingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public SubsettingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -108,6 +108,8 @@ public override ISubsetting Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Subsetting", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -330,7 +332,7 @@ public override ISubsetting Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -351,7 +353,7 @@ public override ISubsetting Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -372,7 +374,7 @@ public override ISubsetting Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -393,7 +395,7 @@ public override ISubsetting Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -414,7 +416,7 @@ public override ISubsetting Read(XmlReader xmiReader, Uri currentLocation) } else { - var subsettedFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var subsettedFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.SubsettedFeature = subsettedFeatureValue; } @@ -435,7 +437,7 @@ public override ISubsetting Read(XmlReader xmiReader, Uri currentLocation) } else { - var subsettingFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var subsettingFeatureValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.SubsettingFeature = subsettingFeatureValue; } @@ -492,6 +494,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Subsetting", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -714,7 +718,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -735,7 +739,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -756,7 +760,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -777,7 +781,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -798,7 +802,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var subsettedFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var subsettedFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.SubsettedFeature = subsettedFeatureValue; } @@ -819,7 +823,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var subsettingFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var subsettingFeatureValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.SubsettingFeature = subsettingFeatureValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SuccessionAsUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SuccessionAsUsageReader.cs index 5cba6cda6..b631760d7 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SuccessionAsUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SuccessionAsUsageReader.cs @@ -88,7 +88,7 @@ public class SuccessionAsUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public SuccessionAsUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public SuccessionAsUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -134,6 +134,8 @@ public override ISuccessionAsUsage Read(XmlReader xmiReader, Uri currentLocation this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "SuccessionAsUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -578,7 +580,7 @@ public override ISuccessionAsUsage Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -599,7 +601,7 @@ public override ISuccessionAsUsage Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -620,7 +622,7 @@ public override ISuccessionAsUsage Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -641,7 +643,7 @@ public override ISuccessionAsUsage Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -698,6 +700,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "SuccessionAsUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1142,7 +1146,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -1163,7 +1167,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1184,7 +1188,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -1205,7 +1209,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SuccessionFlowReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SuccessionFlowReader.cs index 2bec6f31e..35089b1d4 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SuccessionFlowReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SuccessionFlowReader.cs @@ -68,7 +68,7 @@ public class SuccessionFlowReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public SuccessionFlowReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public SuccessionFlowReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -114,6 +114,8 @@ public override ISuccessionFlow Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "SuccessionFlow", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -558,7 +560,7 @@ public override ISuccessionFlow Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -579,7 +581,7 @@ public override ISuccessionFlow Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -600,7 +602,7 @@ public override ISuccessionFlow Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -621,7 +623,7 @@ public override ISuccessionFlow Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -678,6 +680,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "SuccessionFlow", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1122,7 +1126,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -1143,7 +1147,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1164,7 +1168,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -1185,7 +1189,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SuccessionFlowUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SuccessionFlowUsageReader.cs index e6afa8660..af918d310 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SuccessionFlowUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SuccessionFlowUsageReader.cs @@ -92,7 +92,7 @@ public class SuccessionFlowUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public SuccessionFlowUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public SuccessionFlowUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -138,6 +138,8 @@ public override ISuccessionFlowUsage Read(XmlReader xmiReader, Uri currentLocati this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "SuccessionFlowUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -614,7 +616,7 @@ public override ISuccessionFlowUsage Read(XmlReader xmiReader, Uri currentLocati } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -635,7 +637,7 @@ public override ISuccessionFlowUsage Read(XmlReader xmiReader, Uri currentLocati } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -656,7 +658,7 @@ public override ISuccessionFlowUsage Read(XmlReader xmiReader, Uri currentLocati } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -677,7 +679,7 @@ public override ISuccessionFlowUsage Read(XmlReader xmiReader, Uri currentLocati } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -746,6 +748,8 @@ public override async Task ReadAsync(XmlReader xmiReader, this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "SuccessionFlowUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1222,7 +1226,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -1243,7 +1247,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1264,7 +1268,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -1285,7 +1289,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SuccessionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SuccessionReader.cs index 1e55cf9e8..b811568cd 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SuccessionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/SuccessionReader.cs @@ -65,7 +65,7 @@ public class SuccessionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public SuccessionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public SuccessionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -111,6 +111,8 @@ public override ISuccession Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Succession", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -555,7 +557,7 @@ public override ISuccession Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -576,7 +578,7 @@ public override ISuccession Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -597,7 +599,7 @@ public override ISuccession Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -618,7 +620,7 @@ public override ISuccession Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -675,6 +677,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Succession", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1119,7 +1123,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -1140,7 +1144,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1161,7 +1165,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -1182,7 +1186,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curre } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TerminateActionUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TerminateActionUsageReader.cs index bcd5f20d6..27785728d 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TerminateActionUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TerminateActionUsageReader.cs @@ -90,7 +90,7 @@ public class TerminateActionUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public TerminateActionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public TerminateActionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -136,6 +136,8 @@ public override ITerminateActionUsage Read(XmlReader xmiReader, Uri currentLocat this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "TerminateActionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -560,7 +562,7 @@ public override ITerminateActionUsage Read(XmlReader xmiReader, Uri currentLocat } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -581,7 +583,7 @@ public override ITerminateActionUsage Read(XmlReader xmiReader, Uri currentLocat } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -650,6 +652,8 @@ public override async Task ReadAsync(XmlReader xmiReader, this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "TerminateActionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1074,7 +1078,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1095,7 +1099,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TextualRepresentationReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TextualRepresentationReader.cs index 6916876ad..e5c789080 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TextualRepresentationReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TextualRepresentationReader.cs @@ -60,7 +60,7 @@ public class TextualRepresentationReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public TextualRepresentationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public TextualRepresentationReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -106,6 +106,8 @@ public override ITextualRepresentation Read(XmlReader xmiReader, Uri currentLoca this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "TextualRepresentation", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -294,7 +296,7 @@ public override ITextualRepresentation Read(XmlReader xmiReader, Uri currentLoca } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -315,7 +317,7 @@ public override ITextualRepresentation Read(XmlReader xmiReader, Uri currentLoca } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -372,6 +374,8 @@ public override async Task ReadAsync(XmlReader xmiReader this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "TextualRepresentation", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -560,7 +564,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -581,7 +585,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TransitionFeatureMembershipReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TransitionFeatureMembershipReader.cs index 56496b3f9..f2a2fa7e5 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TransitionFeatureMembershipReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TransitionFeatureMembershipReader.cs @@ -66,7 +66,7 @@ public class TransitionFeatureMembershipReader : XmiDataReader /// The injected used to register and process external references /// The injected used to set up logging - public TransitionFeatureMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public TransitionFeatureMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -112,6 +112,8 @@ public override ITransitionFeatureMembership Read(XmlReader xmiReader, Uri curre this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "TransitionFeatureMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -346,7 +348,7 @@ public override ITransitionFeatureMembership Read(XmlReader xmiReader, Uri curre } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -367,7 +369,7 @@ public override ITransitionFeatureMembership Read(XmlReader xmiReader, Uri curre } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -388,7 +390,7 @@ public override ITransitionFeatureMembership Read(XmlReader xmiReader, Uri curre } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -409,7 +411,7 @@ public override ITransitionFeatureMembership Read(XmlReader xmiReader, Uri curre } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -478,6 +480,8 @@ public override async Task ReadAsync(XmlReader xmi this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "TransitionFeatureMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -712,7 +716,7 @@ public override async Task ReadAsync(XmlReader xmi } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -733,7 +737,7 @@ public override async Task ReadAsync(XmlReader xmi } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -754,7 +758,7 @@ public override async Task ReadAsync(XmlReader xmi } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -775,7 +779,7 @@ public override async Task ReadAsync(XmlReader xmi } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TransitionUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TransitionUsageReader.cs index 1ae1e0dcb..68bca9727 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TransitionUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TransitionUsageReader.cs @@ -91,7 +91,7 @@ public class TransitionUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public TransitionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public TransitionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -137,6 +137,8 @@ public override ITransitionUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "TransitionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -561,7 +563,7 @@ public override ITransitionUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -582,7 +584,7 @@ public override ITransitionUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -651,6 +653,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "TransitionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1075,7 +1079,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1096,7 +1100,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TriggerInvocationExpressionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TriggerInvocationExpressionReader.cs index 3f347c4a2..ac432b068 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TriggerInvocationExpressionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TriggerInvocationExpressionReader.cs @@ -68,7 +68,7 @@ public class TriggerInvocationExpressionReader : XmiDataReader /// The injected used to register and process external references /// The injected used to set up logging - public TriggerInvocationExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public TriggerInvocationExpressionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -114,6 +114,8 @@ public override ITriggerInvocationExpression Read(XmlReader xmiReader, Uri curre this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "TriggerInvocationExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -528,7 +530,7 @@ public override ITriggerInvocationExpression Read(XmlReader xmiReader, Uri curre } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -549,7 +551,7 @@ public override ITriggerInvocationExpression Read(XmlReader xmiReader, Uri curre } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -606,6 +608,8 @@ public override async Task ReadAsync(XmlReader xmi this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "TriggerInvocationExpression", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1020,7 +1024,7 @@ public override async Task ReadAsync(XmlReader xmi } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1041,7 +1045,7 @@ public override async Task ReadAsync(XmlReader xmi } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TypeFeaturingReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TypeFeaturingReader.cs index 01cfae493..3bb5d01d6 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TypeFeaturingReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TypeFeaturingReader.cs @@ -62,7 +62,7 @@ public class TypeFeaturingReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public TypeFeaturingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public TypeFeaturingReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -108,6 +108,8 @@ public override ITypeFeaturing Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "TypeFeaturing", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -306,7 +308,7 @@ public override ITypeFeaturing Read(XmlReader xmiReader, Uri currentLocation) } else { - var featureOfTypeValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var featureOfTypeValue = (IFeature)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.FeatureOfType = featureOfTypeValue; } @@ -327,7 +329,7 @@ public override ITypeFeaturing Read(XmlReader xmiReader, Uri currentLocation) } else { - var featuringTypeValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var featuringTypeValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.FeaturingType = featuringTypeValue; } @@ -372,7 +374,7 @@ public override ITypeFeaturing Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -393,7 +395,7 @@ public override ITypeFeaturing Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -414,7 +416,7 @@ public override ITypeFeaturing Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -435,7 +437,7 @@ public override ITypeFeaturing Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -492,6 +494,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "TypeFeaturing", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -690,7 +694,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var featureOfTypeValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var featureOfTypeValue = (IFeature)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.FeatureOfType = featureOfTypeValue; } @@ -711,7 +715,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var featuringTypeValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var featuringTypeValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.FeaturingType = featuringTypeValue; } @@ -756,7 +760,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -777,7 +781,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -798,7 +802,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -819,7 +823,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cu } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TypeReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TypeReader.cs index db0fd0dbb..468f47790 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TypeReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/TypeReader.cs @@ -62,7 +62,7 @@ public class TypeReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public TypeReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public TypeReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -108,6 +108,8 @@ public override IType Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Type", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -302,7 +304,7 @@ public override IType Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -323,7 +325,7 @@ public override IType Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -380,6 +382,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoca this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Type", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -574,7 +578,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoca } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -595,7 +599,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoca } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/UnioningReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/UnioningReader.cs index c7e4f894e..2b5af708b 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/UnioningReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/UnioningReader.cs @@ -61,7 +61,7 @@ public class UnioningReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public UnioningReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public UnioningReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -107,6 +107,8 @@ public override IUnioning Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Unioning", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -319,7 +321,7 @@ public override IUnioning Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -340,7 +342,7 @@ public override IUnioning Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -361,7 +363,7 @@ public override IUnioning Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -382,7 +384,7 @@ public override IUnioning Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -403,7 +405,7 @@ public override IUnioning Read(XmlReader xmiReader, Uri currentLocation) } else { - var unioningTypeValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var unioningTypeValue = (IType)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.UnioningType = unioningTypeValue; } @@ -460,6 +462,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri current this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Unioning", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -672,7 +676,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri current } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -693,7 +697,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri current } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -714,7 +718,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri current } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -735,7 +739,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri current } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -756,7 +760,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri current } else { - var unioningTypeValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var unioningTypeValue = (IType)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); poco.UnioningType = unioningTypeValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/UsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/UsageReader.cs index 865b63a25..6ebda1fe8 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/UsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/UsageReader.cs @@ -86,7 +86,7 @@ public class UsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public UsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public UsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -132,6 +132,8 @@ public override IUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Usage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -524,7 +526,7 @@ public override IUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -545,7 +547,7 @@ public override IUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -602,6 +604,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoc this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "Usage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -994,7 +998,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoc } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1015,7 +1019,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri currentLoc } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/UseCaseDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/UseCaseDefinitionReader.cs index 1798abe05..a4772d718 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/UseCaseDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/UseCaseDefinitionReader.cs @@ -87,7 +87,7 @@ public class UseCaseDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public UseCaseDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public UseCaseDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -133,6 +133,8 @@ public override IUseCaseDefinition Read(XmlReader xmiReader, Uri currentLocation this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "UseCaseDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -371,7 +373,7 @@ public override IUseCaseDefinition Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -392,7 +394,7 @@ public override IUseCaseDefinition Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -449,6 +451,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "UseCaseDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -687,7 +691,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -708,7 +712,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/UseCaseUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/UseCaseUsageReader.cs index a3c5ccf7d..be0172fbe 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/UseCaseUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/UseCaseUsageReader.cs @@ -90,7 +90,7 @@ public class UseCaseUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public UseCaseUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public UseCaseUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -136,6 +136,8 @@ public override IUseCaseUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "UseCaseUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -560,7 +562,7 @@ public override IUseCaseUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -581,7 +583,7 @@ public override IUseCaseUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -650,6 +652,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "UseCaseUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1074,7 +1078,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1095,7 +1099,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri cur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/VariantMembershipReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/VariantMembershipReader.cs index e11f62813..0c9183d87 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/VariantMembershipReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/VariantMembershipReader.cs @@ -62,7 +62,7 @@ public class VariantMembershipReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public VariantMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public VariantMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -108,6 +108,8 @@ public override IVariantMembership Read(XmlReader xmiReader, Uri currentLocation this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "VariantMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -320,7 +322,7 @@ public override IVariantMembership Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -341,7 +343,7 @@ public override IVariantMembership Read(XmlReader xmiReader, Uri currentLocation } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -362,7 +364,7 @@ public override IVariantMembership Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -383,7 +385,7 @@ public override IVariantMembership Read(XmlReader xmiReader, Uri currentLocation } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -452,6 +454,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "VariantMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -664,7 +668,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -685,7 +689,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -706,7 +710,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -727,7 +731,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Ur } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/VerificationCaseDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/VerificationCaseDefinitionReader.cs index d66274707..bc2803928 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/VerificationCaseDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/VerificationCaseDefinitionReader.cs @@ -87,7 +87,7 @@ public class VerificationCaseDefinitionReader : XmiDataReader /// The injected used to register and process external references /// The injected used to set up logging - public VerificationCaseDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public VerificationCaseDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -133,6 +133,8 @@ public override IVerificationCaseDefinition Read(XmlReader xmiReader, Uri curren this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "VerificationCaseDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -371,7 +373,7 @@ public override IVerificationCaseDefinition Read(XmlReader xmiReader, Uri curren } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -392,7 +394,7 @@ public override IVerificationCaseDefinition Read(XmlReader xmiReader, Uri curren } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -449,6 +451,8 @@ public override async Task ReadAsync(XmlReader xmiR this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "VerificationCaseDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -687,7 +691,7 @@ public override async Task ReadAsync(XmlReader xmiR } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -708,7 +712,7 @@ public override async Task ReadAsync(XmlReader xmiR } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/VerificationCaseUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/VerificationCaseUsageReader.cs index 4530f24c2..5a0696ab6 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/VerificationCaseUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/VerificationCaseUsageReader.cs @@ -90,7 +90,7 @@ public class VerificationCaseUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public VerificationCaseUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public VerificationCaseUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -136,6 +136,8 @@ public override IVerificationCaseUsage Read(XmlReader xmiReader, Uri currentLoca this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "VerificationCaseUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -560,7 +562,7 @@ public override IVerificationCaseUsage Read(XmlReader xmiReader, Uri currentLoca } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -581,7 +583,7 @@ public override IVerificationCaseUsage Read(XmlReader xmiReader, Uri currentLoca } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -650,6 +652,8 @@ public override async Task ReadAsync(XmlReader xmiReader this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "VerificationCaseUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1074,7 +1078,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1095,7 +1099,7 @@ public override async Task ReadAsync(XmlReader xmiReader } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ViewDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ViewDefinitionReader.cs index 3e601b92c..c83c98107 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ViewDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ViewDefinitionReader.cs @@ -86,7 +86,7 @@ public class ViewDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ViewDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ViewDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -132,6 +132,8 @@ public override IViewDefinition Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ViewDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -370,7 +372,7 @@ public override IViewDefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -391,7 +393,7 @@ public override IViewDefinition Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -448,6 +450,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ViewDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -686,7 +690,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -707,7 +711,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ViewRenderingMembershipReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ViewRenderingMembershipReader.cs index 4dcdbf570..373b13f00 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ViewRenderingMembershipReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ViewRenderingMembershipReader.cs @@ -64,7 +64,7 @@ public class ViewRenderingMembershipReader : XmiDataReader /// The injected used to register and process external references /// The injected used to set up logging - public ViewRenderingMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ViewRenderingMembershipReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -110,6 +110,8 @@ public override IViewRenderingMembership Read(XmlReader xmiReader, Uri currentLo this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ViewRenderingMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -322,7 +324,7 @@ public override IViewRenderingMembership Read(XmlReader xmiReader, Uri currentLo } else { - var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -343,7 +345,7 @@ public override IViewRenderingMembership Read(XmlReader xmiReader, Uri currentLo } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -364,7 +366,7 @@ public override IViewRenderingMembership Read(XmlReader xmiReader, Uri currentLo } else { - var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -385,7 +387,7 @@ public override IViewRenderingMembership Read(XmlReader xmiReader, Uri currentLo } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -454,6 +456,8 @@ public override async Task ReadAsync(XmlReader xmiRead this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ViewRenderingMembership", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -666,7 +670,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwnedRelatedElement.Add(ownedRelatedElementValue); } @@ -687,7 +691,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -708,7 +712,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelatedElementValue = (IElement)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedRelationship)poco).OwningRelatedElement = owningRelatedElementValue; } @@ -729,7 +733,7 @@ public override async Task ReadAsync(XmlReader xmiRead } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ViewUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ViewUsageReader.cs index b1455282f..adf2753b0 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ViewUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ViewUsageReader.cs @@ -90,7 +90,7 @@ public class ViewUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ViewUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ViewUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -136,6 +136,8 @@ public override IViewUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ViewUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -560,7 +562,7 @@ public override IViewUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -581,7 +583,7 @@ public override IViewUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -650,6 +652,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ViewUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1074,7 +1078,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1095,7 +1099,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri curren } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ViewpointDefinitionReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ViewpointDefinitionReader.cs index 3ae0c84df..03eda3e79 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ViewpointDefinitionReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ViewpointDefinitionReader.cs @@ -87,7 +87,7 @@ public class ViewpointDefinitionReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ViewpointDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ViewpointDefinitionReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -133,6 +133,8 @@ public override IViewpointDefinition Read(XmlReader xmiReader, Uri currentLocati this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ViewpointDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -359,7 +361,7 @@ public override IViewpointDefinition Read(XmlReader xmiReader, Uri currentLocati } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -380,7 +382,7 @@ public override IViewpointDefinition Read(XmlReader xmiReader, Uri currentLocati } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -449,6 +451,8 @@ public override async Task ReadAsync(XmlReader xmiReader, this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ViewpointDefinition", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -675,7 +679,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -696,7 +700,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ViewpointUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ViewpointUsageReader.cs index f963fc233..b9fbaff32 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ViewpointUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/ViewpointUsageReader.cs @@ -90,7 +90,7 @@ public class ViewpointUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public ViewpointUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public ViewpointUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -136,6 +136,8 @@ public override IViewpointUsage Read(XmlReader xmiReader, Uri currentLocation) this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ViewpointUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -548,7 +550,7 @@ public override IViewpointUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -569,7 +571,7 @@ public override IViewpointUsage Read(XmlReader xmiReader, Uri currentLocation) } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -650,6 +652,8 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "ViewpointUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1062,7 +1066,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1083,7 +1087,7 @@ public override async Task ReadAsync(XmlReader xmiReader, Uri c } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/WhileLoopActionUsageReader.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/WhileLoopActionUsageReader.cs index 3c74d4f4c..209690a1c 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/WhileLoopActionUsageReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/WhileLoopActionUsageReader.cs @@ -90,7 +90,7 @@ public class WhileLoopActionUsageReader : XmiDataReader /// /// The injected used to register and process external references /// The injected used to set up logging - public WhileLoopActionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory) + public WhileLoopActionUsageReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) : base(cache, xmiDataReaderFacade, externalReferenceService, loggerFactory, elementOriginMap) { this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); } @@ -136,6 +136,8 @@ public override IWhileLoopActionUsage Read(XmlReader xmiReader, Uri currentLocat this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "WhileLoopActionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -560,7 +562,7 @@ public override IWhileLoopActionUsage Read(XmlReader xmiReader, Uri currentLocat } else { - var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -581,7 +583,7 @@ public override IWhileLoopActionUsage Read(XmlReader xmiReader, Uri currentLocat } else { - var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)this.XmiDataReaderFacade.QueryXmiData(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } @@ -650,6 +652,8 @@ public override async Task ReadAsync(XmlReader xmiReader, this.logger.LogCritical("Failed to add element type [{Poco}] with id [{Id}] as it was already in the Cache. The XMI document seems to have duplicate xmi:id values", "WhileLoopActionUsage", poco.Id); } + this.ElementOriginMap?.Register(poco.Id, currentLocation); + var aliasIdsXmlAttribute = xmiReader.GetAttribute("aliasIds"); if (!string.IsNullOrWhiteSpace(aliasIdsXmlAttribute)) @@ -1074,7 +1078,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var ownedRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwnedRelationship.Add(ownedRelationshipValue); } @@ -1095,7 +1099,7 @@ public override async Task ReadAsync(XmlReader xmiReader, } else { - var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory); + var owningRelationshipValue = (IRelationship)await this.XmiDataReaderFacade.QueryXmiDataAsync(xmiReader, this.Cache, currentLocation, this.ExternalReferenceService, this.LoggerFactory, elementOriginMap: this.ElementOriginMap); ((IContainedElement)poco).OwningRelationship = owningRelationshipValue; } diff --git a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/XmiDataReaderFacade.cs b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/XmiDataReaderFacade.cs index c34da7c54..aef36854c 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/XmiDataReaderFacade.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/AutoGenReaders/XmiDataReaderFacade.cs @@ -44,2027 +44,2027 @@ public class XmiDataReaderFacade : IXmiDataReaderFacade /// A dictionary that contains functions that return based a key that represents the xsi Type /// and a provided , , and /// - private readonly Dictionary> readerCache; + private readonly Dictionary> readerCache; /// /// A dictionary that contains functions that return an awaitable with the based a key that represents the xsi Type /// and a provided , , and /// - private readonly Dictionary>> readerAsyncCache; + private readonly Dictionary>> readerAsyncCache; /// /// Initializes a new instance of the /// public XmiDataReaderFacade() { - this.readerCache = new Dictionary> + this.readerCache = new Dictionary> { - ["sysml:AcceptActionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AcceptActionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var acceptActionUsageReader = new AcceptActionUsageReader(cache, this, externalReferenceService, loggerFactory); + var acceptActionUsageReader = new AcceptActionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return acceptActionUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:ActionDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ActionDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var actionDefinitionReader = new ActionDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var actionDefinitionReader = new ActionDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return actionDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:ActionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ActionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var actionUsageReader = new ActionUsageReader(cache, this, externalReferenceService, loggerFactory); + var actionUsageReader = new ActionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return actionUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:ActorMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ActorMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var actorMembershipReader = new ActorMembershipReader(cache, this, externalReferenceService, loggerFactory); + var actorMembershipReader = new ActorMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return actorMembershipReader.Read(subXmlReader, currentLocation); }, - ["sysml:AllocationDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AllocationDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var allocationDefinitionReader = new AllocationDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var allocationDefinitionReader = new AllocationDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return allocationDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:AllocationUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AllocationUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var allocationUsageReader = new AllocationUsageReader(cache, this, externalReferenceService, loggerFactory); + var allocationUsageReader = new AllocationUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return allocationUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:AnalysisCaseDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AnalysisCaseDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var analysisCaseDefinitionReader = new AnalysisCaseDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var analysisCaseDefinitionReader = new AnalysisCaseDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return analysisCaseDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:AnalysisCaseUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AnalysisCaseUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var analysisCaseUsageReader = new AnalysisCaseUsageReader(cache, this, externalReferenceService, loggerFactory); + var analysisCaseUsageReader = new AnalysisCaseUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return analysisCaseUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:AnnotatingElement"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AnnotatingElement"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var annotatingElementReader = new AnnotatingElementReader(cache, this, externalReferenceService, loggerFactory); + var annotatingElementReader = new AnnotatingElementReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return annotatingElementReader.Read(subXmlReader, currentLocation); }, - ["sysml:Annotation"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Annotation"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var annotationReader = new AnnotationReader(cache, this, externalReferenceService, loggerFactory); + var annotationReader = new AnnotationReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return annotationReader.Read(subXmlReader, currentLocation); }, - ["sysml:AssertConstraintUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AssertConstraintUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var assertConstraintUsageReader = new AssertConstraintUsageReader(cache, this, externalReferenceService, loggerFactory); + var assertConstraintUsageReader = new AssertConstraintUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return assertConstraintUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:AssignmentActionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AssignmentActionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var assignmentActionUsageReader = new AssignmentActionUsageReader(cache, this, externalReferenceService, loggerFactory); + var assignmentActionUsageReader = new AssignmentActionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return assignmentActionUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:Association"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Association"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var associationReader = new AssociationReader(cache, this, externalReferenceService, loggerFactory); + var associationReader = new AssociationReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return associationReader.Read(subXmlReader, currentLocation); }, - ["sysml:AssociationStructure"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AssociationStructure"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var associationStructureReader = new AssociationStructureReader(cache, this, externalReferenceService, loggerFactory); + var associationStructureReader = new AssociationStructureReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return associationStructureReader.Read(subXmlReader, currentLocation); }, - ["sysml:AttributeDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AttributeDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var attributeDefinitionReader = new AttributeDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var attributeDefinitionReader = new AttributeDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return attributeDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:AttributeUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AttributeUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var attributeUsageReader = new AttributeUsageReader(cache, this, externalReferenceService, loggerFactory); + var attributeUsageReader = new AttributeUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return attributeUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:Behavior"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Behavior"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var behaviorReader = new BehaviorReader(cache, this, externalReferenceService, loggerFactory); + var behaviorReader = new BehaviorReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return behaviorReader.Read(subXmlReader, currentLocation); }, - ["sysml:BindingConnector"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:BindingConnector"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var bindingConnectorReader = new BindingConnectorReader(cache, this, externalReferenceService, loggerFactory); + var bindingConnectorReader = new BindingConnectorReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return bindingConnectorReader.Read(subXmlReader, currentLocation); }, - ["sysml:BindingConnectorAsUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:BindingConnectorAsUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var bindingConnectorAsUsageReader = new BindingConnectorAsUsageReader(cache, this, externalReferenceService, loggerFactory); + var bindingConnectorAsUsageReader = new BindingConnectorAsUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return bindingConnectorAsUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:BooleanExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:BooleanExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var booleanExpressionReader = new BooleanExpressionReader(cache, this, externalReferenceService, loggerFactory); + var booleanExpressionReader = new BooleanExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return booleanExpressionReader.Read(subXmlReader, currentLocation); }, - ["sysml:CalculationDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:CalculationDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var calculationDefinitionReader = new CalculationDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var calculationDefinitionReader = new CalculationDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return calculationDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:CalculationUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:CalculationUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var calculationUsageReader = new CalculationUsageReader(cache, this, externalReferenceService, loggerFactory); + var calculationUsageReader = new CalculationUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return calculationUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:CaseDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:CaseDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var caseDefinitionReader = new CaseDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var caseDefinitionReader = new CaseDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return caseDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:CaseUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:CaseUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var caseUsageReader = new CaseUsageReader(cache, this, externalReferenceService, loggerFactory); + var caseUsageReader = new CaseUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return caseUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:Class"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Class"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var classReader = new ClassReader(cache, this, externalReferenceService, loggerFactory); + var classReader = new ClassReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return classReader.Read(subXmlReader, currentLocation); }, - ["sysml:Classifier"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Classifier"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var classifierReader = new ClassifierReader(cache, this, externalReferenceService, loggerFactory); + var classifierReader = new ClassifierReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return classifierReader.Read(subXmlReader, currentLocation); }, - ["sysml:CollectExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:CollectExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var collectExpressionReader = new CollectExpressionReader(cache, this, externalReferenceService, loggerFactory); + var collectExpressionReader = new CollectExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return collectExpressionReader.Read(subXmlReader, currentLocation); }, - ["sysml:Comment"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Comment"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var commentReader = new CommentReader(cache, this, externalReferenceService, loggerFactory); + var commentReader = new CommentReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return commentReader.Read(subXmlReader, currentLocation); }, - ["sysml:ConcernDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ConcernDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var concernDefinitionReader = new ConcernDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var concernDefinitionReader = new ConcernDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return concernDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:ConcernUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ConcernUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var concernUsageReader = new ConcernUsageReader(cache, this, externalReferenceService, loggerFactory); + var concernUsageReader = new ConcernUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return concernUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:ConjugatedPortDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ConjugatedPortDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var conjugatedPortDefinitionReader = new ConjugatedPortDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var conjugatedPortDefinitionReader = new ConjugatedPortDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return conjugatedPortDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:ConjugatedPortTyping"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ConjugatedPortTyping"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var conjugatedPortTypingReader = new ConjugatedPortTypingReader(cache, this, externalReferenceService, loggerFactory); + var conjugatedPortTypingReader = new ConjugatedPortTypingReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return conjugatedPortTypingReader.Read(subXmlReader, currentLocation); }, - ["sysml:Conjugation"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Conjugation"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var conjugationReader = new ConjugationReader(cache, this, externalReferenceService, loggerFactory); + var conjugationReader = new ConjugationReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return conjugationReader.Read(subXmlReader, currentLocation); }, - ["sysml:ConnectionDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ConnectionDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var connectionDefinitionReader = new ConnectionDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var connectionDefinitionReader = new ConnectionDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return connectionDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:ConnectionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ConnectionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var connectionUsageReader = new ConnectionUsageReader(cache, this, externalReferenceService, loggerFactory); + var connectionUsageReader = new ConnectionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return connectionUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:Connector"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Connector"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var connectorReader = new ConnectorReader(cache, this, externalReferenceService, loggerFactory); + var connectorReader = new ConnectorReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return connectorReader.Read(subXmlReader, currentLocation); }, - ["sysml:ConstraintDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ConstraintDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var constraintDefinitionReader = new ConstraintDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var constraintDefinitionReader = new ConstraintDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return constraintDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:ConstraintUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ConstraintUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var constraintUsageReader = new ConstraintUsageReader(cache, this, externalReferenceService, loggerFactory); + var constraintUsageReader = new ConstraintUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return constraintUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:ConstructorExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ConstructorExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var constructorExpressionReader = new ConstructorExpressionReader(cache, this, externalReferenceService, loggerFactory); + var constructorExpressionReader = new ConstructorExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return constructorExpressionReader.Read(subXmlReader, currentLocation); }, - ["sysml:CrossSubsetting"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:CrossSubsetting"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var crossSubsettingReader = new CrossSubsettingReader(cache, this, externalReferenceService, loggerFactory); + var crossSubsettingReader = new CrossSubsettingReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return crossSubsettingReader.Read(subXmlReader, currentLocation); }, - ["sysml:DataType"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:DataType"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var dataTypeReader = new DataTypeReader(cache, this, externalReferenceService, loggerFactory); + var dataTypeReader = new DataTypeReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return dataTypeReader.Read(subXmlReader, currentLocation); }, - ["sysml:DecisionNode"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:DecisionNode"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var decisionNodeReader = new DecisionNodeReader(cache, this, externalReferenceService, loggerFactory); + var decisionNodeReader = new DecisionNodeReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return decisionNodeReader.Read(subXmlReader, currentLocation); }, - ["sysml:Definition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Definition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var definitionReader = new DefinitionReader(cache, this, externalReferenceService, loggerFactory); + var definitionReader = new DefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return definitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:Dependency"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Dependency"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var dependencyReader = new DependencyReader(cache, this, externalReferenceService, loggerFactory); + var dependencyReader = new DependencyReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return dependencyReader.Read(subXmlReader, currentLocation); }, - ["sysml:Differencing"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Differencing"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var differencingReader = new DifferencingReader(cache, this, externalReferenceService, loggerFactory); + var differencingReader = new DifferencingReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return differencingReader.Read(subXmlReader, currentLocation); }, - ["sysml:Disjoining"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Disjoining"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var disjoiningReader = new DisjoiningReader(cache, this, externalReferenceService, loggerFactory); + var disjoiningReader = new DisjoiningReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return disjoiningReader.Read(subXmlReader, currentLocation); }, - ["sysml:Documentation"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Documentation"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var documentationReader = new DocumentationReader(cache, this, externalReferenceService, loggerFactory); + var documentationReader = new DocumentationReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return documentationReader.Read(subXmlReader, currentLocation); }, - ["sysml:ElementFilterMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ElementFilterMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var elementFilterMembershipReader = new ElementFilterMembershipReader(cache, this, externalReferenceService, loggerFactory); + var elementFilterMembershipReader = new ElementFilterMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return elementFilterMembershipReader.Read(subXmlReader, currentLocation); }, - ["sysml:EndFeatureMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:EndFeatureMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var endFeatureMembershipReader = new EndFeatureMembershipReader(cache, this, externalReferenceService, loggerFactory); + var endFeatureMembershipReader = new EndFeatureMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return endFeatureMembershipReader.Read(subXmlReader, currentLocation); }, - ["sysml:EnumerationDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:EnumerationDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var enumerationDefinitionReader = new EnumerationDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var enumerationDefinitionReader = new EnumerationDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return enumerationDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:EnumerationUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:EnumerationUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var enumerationUsageReader = new EnumerationUsageReader(cache, this, externalReferenceService, loggerFactory); + var enumerationUsageReader = new EnumerationUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return enumerationUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:EventOccurrenceUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:EventOccurrenceUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var eventOccurrenceUsageReader = new EventOccurrenceUsageReader(cache, this, externalReferenceService, loggerFactory); + var eventOccurrenceUsageReader = new EventOccurrenceUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return eventOccurrenceUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:ExhibitStateUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ExhibitStateUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var exhibitStateUsageReader = new ExhibitStateUsageReader(cache, this, externalReferenceService, loggerFactory); + var exhibitStateUsageReader = new ExhibitStateUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return exhibitStateUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:Expression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Expression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var expressionReader = new ExpressionReader(cache, this, externalReferenceService, loggerFactory); + var expressionReader = new ExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return expressionReader.Read(subXmlReader, currentLocation); }, - ["sysml:Feature"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Feature"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var featureReader = new FeatureReader(cache, this, externalReferenceService, loggerFactory); + var featureReader = new FeatureReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return featureReader.Read(subXmlReader, currentLocation); }, - ["sysml:FeatureChainExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FeatureChainExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var featureChainExpressionReader = new FeatureChainExpressionReader(cache, this, externalReferenceService, loggerFactory); + var featureChainExpressionReader = new FeatureChainExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return featureChainExpressionReader.Read(subXmlReader, currentLocation); }, - ["sysml:FeatureChaining"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FeatureChaining"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var featureChainingReader = new FeatureChainingReader(cache, this, externalReferenceService, loggerFactory); + var featureChainingReader = new FeatureChainingReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return featureChainingReader.Read(subXmlReader, currentLocation); }, - ["sysml:FeatureInverting"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FeatureInverting"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var featureInvertingReader = new FeatureInvertingReader(cache, this, externalReferenceService, loggerFactory); + var featureInvertingReader = new FeatureInvertingReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return featureInvertingReader.Read(subXmlReader, currentLocation); }, - ["sysml:FeatureMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FeatureMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var featureMembershipReader = new FeatureMembershipReader(cache, this, externalReferenceService, loggerFactory); + var featureMembershipReader = new FeatureMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return featureMembershipReader.Read(subXmlReader, currentLocation); }, - ["sysml:FeatureReferenceExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FeatureReferenceExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var featureReferenceExpressionReader = new FeatureReferenceExpressionReader(cache, this, externalReferenceService, loggerFactory); + var featureReferenceExpressionReader = new FeatureReferenceExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return featureReferenceExpressionReader.Read(subXmlReader, currentLocation); }, - ["sysml:FeatureTyping"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FeatureTyping"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var featureTypingReader = new FeatureTypingReader(cache, this, externalReferenceService, loggerFactory); + var featureTypingReader = new FeatureTypingReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return featureTypingReader.Read(subXmlReader, currentLocation); }, - ["sysml:FeatureValue"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FeatureValue"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var featureValueReader = new FeatureValueReader(cache, this, externalReferenceService, loggerFactory); + var featureValueReader = new FeatureValueReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return featureValueReader.Read(subXmlReader, currentLocation); }, - ["sysml:Flow"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Flow"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var flowReader = new FlowReader(cache, this, externalReferenceService, loggerFactory); + var flowReader = new FlowReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return flowReader.Read(subXmlReader, currentLocation); }, - ["sysml:FlowDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FlowDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var flowDefinitionReader = new FlowDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var flowDefinitionReader = new FlowDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return flowDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:FlowEnd"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FlowEnd"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var flowEndReader = new FlowEndReader(cache, this, externalReferenceService, loggerFactory); + var flowEndReader = new FlowEndReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return flowEndReader.Read(subXmlReader, currentLocation); }, - ["sysml:FlowUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FlowUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var flowUsageReader = new FlowUsageReader(cache, this, externalReferenceService, loggerFactory); + var flowUsageReader = new FlowUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return flowUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:ForkNode"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ForkNode"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var forkNodeReader = new ForkNodeReader(cache, this, externalReferenceService, loggerFactory); + var forkNodeReader = new ForkNodeReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return forkNodeReader.Read(subXmlReader, currentLocation); }, - ["sysml:ForLoopActionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ForLoopActionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var forLoopActionUsageReader = new ForLoopActionUsageReader(cache, this, externalReferenceService, loggerFactory); + var forLoopActionUsageReader = new ForLoopActionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return forLoopActionUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:FramedConcernMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FramedConcernMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var framedConcernMembershipReader = new FramedConcernMembershipReader(cache, this, externalReferenceService, loggerFactory); + var framedConcernMembershipReader = new FramedConcernMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return framedConcernMembershipReader.Read(subXmlReader, currentLocation); }, - ["sysml:Function"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Function"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var functionReader = new FunctionReader(cache, this, externalReferenceService, loggerFactory); + var functionReader = new FunctionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return functionReader.Read(subXmlReader, currentLocation); }, - ["sysml:IfActionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:IfActionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var ifActionUsageReader = new IfActionUsageReader(cache, this, externalReferenceService, loggerFactory); + var ifActionUsageReader = new IfActionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return ifActionUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:IncludeUseCaseUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:IncludeUseCaseUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var includeUseCaseUsageReader = new IncludeUseCaseUsageReader(cache, this, externalReferenceService, loggerFactory); + var includeUseCaseUsageReader = new IncludeUseCaseUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return includeUseCaseUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:IndexExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:IndexExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var indexExpressionReader = new IndexExpressionReader(cache, this, externalReferenceService, loggerFactory); + var indexExpressionReader = new IndexExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return indexExpressionReader.Read(subXmlReader, currentLocation); }, - ["sysml:Interaction"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Interaction"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var interactionReader = new InteractionReader(cache, this, externalReferenceService, loggerFactory); + var interactionReader = new InteractionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return interactionReader.Read(subXmlReader, currentLocation); }, - ["sysml:InterfaceDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:InterfaceDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var interfaceDefinitionReader = new InterfaceDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var interfaceDefinitionReader = new InterfaceDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return interfaceDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:InterfaceUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:InterfaceUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var interfaceUsageReader = new InterfaceUsageReader(cache, this, externalReferenceService, loggerFactory); + var interfaceUsageReader = new InterfaceUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return interfaceUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:Intersecting"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Intersecting"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var intersectingReader = new IntersectingReader(cache, this, externalReferenceService, loggerFactory); + var intersectingReader = new IntersectingReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return intersectingReader.Read(subXmlReader, currentLocation); }, - ["sysml:Invariant"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Invariant"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var invariantReader = new InvariantReader(cache, this, externalReferenceService, loggerFactory); + var invariantReader = new InvariantReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return invariantReader.Read(subXmlReader, currentLocation); }, - ["sysml:InvocationExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:InvocationExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var invocationExpressionReader = new InvocationExpressionReader(cache, this, externalReferenceService, loggerFactory); + var invocationExpressionReader = new InvocationExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return invocationExpressionReader.Read(subXmlReader, currentLocation); }, - ["sysml:ItemDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ItemDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var itemDefinitionReader = new ItemDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var itemDefinitionReader = new ItemDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return itemDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:ItemUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ItemUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var itemUsageReader = new ItemUsageReader(cache, this, externalReferenceService, loggerFactory); + var itemUsageReader = new ItemUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return itemUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:JoinNode"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:JoinNode"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var joinNodeReader = new JoinNodeReader(cache, this, externalReferenceService, loggerFactory); + var joinNodeReader = new JoinNodeReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return joinNodeReader.Read(subXmlReader, currentLocation); }, - ["sysml:LibraryPackage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:LibraryPackage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var libraryPackageReader = new LibraryPackageReader(cache, this, externalReferenceService, loggerFactory); + var libraryPackageReader = new LibraryPackageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return libraryPackageReader.Read(subXmlReader, currentLocation); }, - ["sysml:LiteralBoolean"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:LiteralBoolean"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var literalBooleanReader = new LiteralBooleanReader(cache, this, externalReferenceService, loggerFactory); + var literalBooleanReader = new LiteralBooleanReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return literalBooleanReader.Read(subXmlReader, currentLocation); }, - ["sysml:LiteralExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:LiteralExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var literalExpressionReader = new LiteralExpressionReader(cache, this, externalReferenceService, loggerFactory); + var literalExpressionReader = new LiteralExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return literalExpressionReader.Read(subXmlReader, currentLocation); }, - ["sysml:LiteralInfinity"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:LiteralInfinity"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var literalInfinityReader = new LiteralInfinityReader(cache, this, externalReferenceService, loggerFactory); + var literalInfinityReader = new LiteralInfinityReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return literalInfinityReader.Read(subXmlReader, currentLocation); }, - ["sysml:LiteralInteger"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:LiteralInteger"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var literalIntegerReader = new LiteralIntegerReader(cache, this, externalReferenceService, loggerFactory); + var literalIntegerReader = new LiteralIntegerReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return literalIntegerReader.Read(subXmlReader, currentLocation); }, - ["sysml:LiteralRational"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:LiteralRational"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var literalRationalReader = new LiteralRationalReader(cache, this, externalReferenceService, loggerFactory); + var literalRationalReader = new LiteralRationalReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return literalRationalReader.Read(subXmlReader, currentLocation); }, - ["sysml:LiteralString"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:LiteralString"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var literalStringReader = new LiteralStringReader(cache, this, externalReferenceService, loggerFactory); + var literalStringReader = new LiteralStringReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return literalStringReader.Read(subXmlReader, currentLocation); }, - ["sysml:Membership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Membership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var membershipReader = new MembershipReader(cache, this, externalReferenceService, loggerFactory); + var membershipReader = new MembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return membershipReader.Read(subXmlReader, currentLocation); }, - ["sysml:MembershipExpose"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:MembershipExpose"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var membershipExposeReader = new MembershipExposeReader(cache, this, externalReferenceService, loggerFactory); + var membershipExposeReader = new MembershipExposeReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return membershipExposeReader.Read(subXmlReader, currentLocation); }, - ["sysml:MembershipImport"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:MembershipImport"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var membershipImportReader = new MembershipImportReader(cache, this, externalReferenceService, loggerFactory); + var membershipImportReader = new MembershipImportReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return membershipImportReader.Read(subXmlReader, currentLocation); }, - ["sysml:MergeNode"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:MergeNode"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var mergeNodeReader = new MergeNodeReader(cache, this, externalReferenceService, loggerFactory); + var mergeNodeReader = new MergeNodeReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return mergeNodeReader.Read(subXmlReader, currentLocation); }, - ["sysml:Metaclass"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Metaclass"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var metaclassReader = new MetaclassReader(cache, this, externalReferenceService, loggerFactory); + var metaclassReader = new MetaclassReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return metaclassReader.Read(subXmlReader, currentLocation); }, - ["sysml:MetadataAccessExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:MetadataAccessExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var metadataAccessExpressionReader = new MetadataAccessExpressionReader(cache, this, externalReferenceService, loggerFactory); + var metadataAccessExpressionReader = new MetadataAccessExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return metadataAccessExpressionReader.Read(subXmlReader, currentLocation); }, - ["sysml:MetadataDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:MetadataDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var metadataDefinitionReader = new MetadataDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var metadataDefinitionReader = new MetadataDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return metadataDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:MetadataFeature"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:MetadataFeature"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var metadataFeatureReader = new MetadataFeatureReader(cache, this, externalReferenceService, loggerFactory); + var metadataFeatureReader = new MetadataFeatureReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return metadataFeatureReader.Read(subXmlReader, currentLocation); }, - ["sysml:MetadataUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:MetadataUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var metadataUsageReader = new MetadataUsageReader(cache, this, externalReferenceService, loggerFactory); + var metadataUsageReader = new MetadataUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return metadataUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:Multiplicity"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Multiplicity"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var multiplicityReader = new MultiplicityReader(cache, this, externalReferenceService, loggerFactory); + var multiplicityReader = new MultiplicityReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return multiplicityReader.Read(subXmlReader, currentLocation); }, - ["sysml:MultiplicityRange"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:MultiplicityRange"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var multiplicityRangeReader = new MultiplicityRangeReader(cache, this, externalReferenceService, loggerFactory); + var multiplicityRangeReader = new MultiplicityRangeReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return multiplicityRangeReader.Read(subXmlReader, currentLocation); }, - ["sysml:Namespace"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Namespace"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var namespaceReader = new NamespaceReader(cache, this, externalReferenceService, loggerFactory); + var namespaceReader = new NamespaceReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return namespaceReader.Read(subXmlReader, currentLocation); }, - ["sysml:NamespaceExpose"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:NamespaceExpose"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var namespaceExposeReader = new NamespaceExposeReader(cache, this, externalReferenceService, loggerFactory); + var namespaceExposeReader = new NamespaceExposeReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return namespaceExposeReader.Read(subXmlReader, currentLocation); }, - ["sysml:NamespaceImport"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:NamespaceImport"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var namespaceImportReader = new NamespaceImportReader(cache, this, externalReferenceService, loggerFactory); + var namespaceImportReader = new NamespaceImportReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return namespaceImportReader.Read(subXmlReader, currentLocation); }, - ["sysml:NullExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:NullExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var nullExpressionReader = new NullExpressionReader(cache, this, externalReferenceService, loggerFactory); + var nullExpressionReader = new NullExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return nullExpressionReader.Read(subXmlReader, currentLocation); }, - ["sysml:ObjectiveMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ObjectiveMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var objectiveMembershipReader = new ObjectiveMembershipReader(cache, this, externalReferenceService, loggerFactory); + var objectiveMembershipReader = new ObjectiveMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return objectiveMembershipReader.Read(subXmlReader, currentLocation); }, - ["sysml:OccurrenceDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:OccurrenceDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var occurrenceDefinitionReader = new OccurrenceDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var occurrenceDefinitionReader = new OccurrenceDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return occurrenceDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:OccurrenceUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:OccurrenceUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var occurrenceUsageReader = new OccurrenceUsageReader(cache, this, externalReferenceService, loggerFactory); + var occurrenceUsageReader = new OccurrenceUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return occurrenceUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:OperatorExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:OperatorExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var operatorExpressionReader = new OperatorExpressionReader(cache, this, externalReferenceService, loggerFactory); + var operatorExpressionReader = new OperatorExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return operatorExpressionReader.Read(subXmlReader, currentLocation); }, - ["sysml:OwningMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:OwningMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var owningMembershipReader = new OwningMembershipReader(cache, this, externalReferenceService, loggerFactory); + var owningMembershipReader = new OwningMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return owningMembershipReader.Read(subXmlReader, currentLocation); }, - ["sysml:Package"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Package"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var packageReader = new PackageReader(cache, this, externalReferenceService, loggerFactory); + var packageReader = new PackageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return packageReader.Read(subXmlReader, currentLocation); }, - ["sysml:ParameterMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ParameterMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var parameterMembershipReader = new ParameterMembershipReader(cache, this, externalReferenceService, loggerFactory); + var parameterMembershipReader = new ParameterMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return parameterMembershipReader.Read(subXmlReader, currentLocation); }, - ["sysml:PartDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:PartDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var partDefinitionReader = new PartDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var partDefinitionReader = new PartDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return partDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:PartUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:PartUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var partUsageReader = new PartUsageReader(cache, this, externalReferenceService, loggerFactory); + var partUsageReader = new PartUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return partUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:PayloadFeature"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:PayloadFeature"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var payloadFeatureReader = new PayloadFeatureReader(cache, this, externalReferenceService, loggerFactory); + var payloadFeatureReader = new PayloadFeatureReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return payloadFeatureReader.Read(subXmlReader, currentLocation); }, - ["sysml:PerformActionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:PerformActionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var performActionUsageReader = new PerformActionUsageReader(cache, this, externalReferenceService, loggerFactory); + var performActionUsageReader = new PerformActionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return performActionUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:PortConjugation"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:PortConjugation"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var portConjugationReader = new PortConjugationReader(cache, this, externalReferenceService, loggerFactory); + var portConjugationReader = new PortConjugationReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return portConjugationReader.Read(subXmlReader, currentLocation); }, - ["sysml:PortDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:PortDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var portDefinitionReader = new PortDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var portDefinitionReader = new PortDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return portDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:PortUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:PortUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var portUsageReader = new PortUsageReader(cache, this, externalReferenceService, loggerFactory); + var portUsageReader = new PortUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return portUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:Predicate"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Predicate"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var predicateReader = new PredicateReader(cache, this, externalReferenceService, loggerFactory); + var predicateReader = new PredicateReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return predicateReader.Read(subXmlReader, currentLocation); }, - ["sysml:Redefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Redefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var redefinitionReader = new RedefinitionReader(cache, this, externalReferenceService, loggerFactory); + var redefinitionReader = new RedefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return redefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:ReferenceSubsetting"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ReferenceSubsetting"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var referenceSubsettingReader = new ReferenceSubsettingReader(cache, this, externalReferenceService, loggerFactory); + var referenceSubsettingReader = new ReferenceSubsettingReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return referenceSubsettingReader.Read(subXmlReader, currentLocation); }, - ["sysml:ReferenceUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ReferenceUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var referenceUsageReader = new ReferenceUsageReader(cache, this, externalReferenceService, loggerFactory); + var referenceUsageReader = new ReferenceUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return referenceUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:RenderingDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:RenderingDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var renderingDefinitionReader = new RenderingDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var renderingDefinitionReader = new RenderingDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return renderingDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:RenderingUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:RenderingUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var renderingUsageReader = new RenderingUsageReader(cache, this, externalReferenceService, loggerFactory); + var renderingUsageReader = new RenderingUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return renderingUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:RequirementConstraintMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:RequirementConstraintMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var requirementConstraintMembershipReader = new RequirementConstraintMembershipReader(cache, this, externalReferenceService, loggerFactory); + var requirementConstraintMembershipReader = new RequirementConstraintMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return requirementConstraintMembershipReader.Read(subXmlReader, currentLocation); }, - ["sysml:RequirementDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:RequirementDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var requirementDefinitionReader = new RequirementDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var requirementDefinitionReader = new RequirementDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return requirementDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:RequirementUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:RequirementUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var requirementUsageReader = new RequirementUsageReader(cache, this, externalReferenceService, loggerFactory); + var requirementUsageReader = new RequirementUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return requirementUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:RequirementVerificationMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:RequirementVerificationMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var requirementVerificationMembershipReader = new RequirementVerificationMembershipReader(cache, this, externalReferenceService, loggerFactory); + var requirementVerificationMembershipReader = new RequirementVerificationMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return requirementVerificationMembershipReader.Read(subXmlReader, currentLocation); }, - ["sysml:ResultExpressionMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ResultExpressionMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var resultExpressionMembershipReader = new ResultExpressionMembershipReader(cache, this, externalReferenceService, loggerFactory); + var resultExpressionMembershipReader = new ResultExpressionMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return resultExpressionMembershipReader.Read(subXmlReader, currentLocation); }, - ["sysml:ReturnParameterMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ReturnParameterMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var returnParameterMembershipReader = new ReturnParameterMembershipReader(cache, this, externalReferenceService, loggerFactory); + var returnParameterMembershipReader = new ReturnParameterMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return returnParameterMembershipReader.Read(subXmlReader, currentLocation); }, - ["sysml:SatisfyRequirementUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:SatisfyRequirementUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var satisfyRequirementUsageReader = new SatisfyRequirementUsageReader(cache, this, externalReferenceService, loggerFactory); + var satisfyRequirementUsageReader = new SatisfyRequirementUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return satisfyRequirementUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:SelectExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:SelectExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var selectExpressionReader = new SelectExpressionReader(cache, this, externalReferenceService, loggerFactory); + var selectExpressionReader = new SelectExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return selectExpressionReader.Read(subXmlReader, currentLocation); }, - ["sysml:SendActionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:SendActionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var sendActionUsageReader = new SendActionUsageReader(cache, this, externalReferenceService, loggerFactory); + var sendActionUsageReader = new SendActionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return sendActionUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:Specialization"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Specialization"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var specializationReader = new SpecializationReader(cache, this, externalReferenceService, loggerFactory); + var specializationReader = new SpecializationReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return specializationReader.Read(subXmlReader, currentLocation); }, - ["sysml:StakeholderMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:StakeholderMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var stakeholderMembershipReader = new StakeholderMembershipReader(cache, this, externalReferenceService, loggerFactory); + var stakeholderMembershipReader = new StakeholderMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return stakeholderMembershipReader.Read(subXmlReader, currentLocation); }, - ["sysml:StateDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:StateDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var stateDefinitionReader = new StateDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var stateDefinitionReader = new StateDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return stateDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:StateSubactionMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:StateSubactionMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var stateSubactionMembershipReader = new StateSubactionMembershipReader(cache, this, externalReferenceService, loggerFactory); + var stateSubactionMembershipReader = new StateSubactionMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return stateSubactionMembershipReader.Read(subXmlReader, currentLocation); }, - ["sysml:StateUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:StateUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var stateUsageReader = new StateUsageReader(cache, this, externalReferenceService, loggerFactory); + var stateUsageReader = new StateUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return stateUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:Step"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Step"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var stepReader = new StepReader(cache, this, externalReferenceService, loggerFactory); + var stepReader = new StepReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return stepReader.Read(subXmlReader, currentLocation); }, - ["sysml:Structure"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Structure"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var structureReader = new StructureReader(cache, this, externalReferenceService, loggerFactory); + var structureReader = new StructureReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return structureReader.Read(subXmlReader, currentLocation); }, - ["sysml:Subclassification"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Subclassification"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var subclassificationReader = new SubclassificationReader(cache, this, externalReferenceService, loggerFactory); + var subclassificationReader = new SubclassificationReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return subclassificationReader.Read(subXmlReader, currentLocation); }, - ["sysml:SubjectMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:SubjectMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var subjectMembershipReader = new SubjectMembershipReader(cache, this, externalReferenceService, loggerFactory); + var subjectMembershipReader = new SubjectMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return subjectMembershipReader.Read(subXmlReader, currentLocation); }, - ["sysml:Subsetting"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Subsetting"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var subsettingReader = new SubsettingReader(cache, this, externalReferenceService, loggerFactory); + var subsettingReader = new SubsettingReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return subsettingReader.Read(subXmlReader, currentLocation); }, - ["sysml:Succession"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Succession"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var successionReader = new SuccessionReader(cache, this, externalReferenceService, loggerFactory); + var successionReader = new SuccessionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return successionReader.Read(subXmlReader, currentLocation); }, - ["sysml:SuccessionAsUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:SuccessionAsUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var successionAsUsageReader = new SuccessionAsUsageReader(cache, this, externalReferenceService, loggerFactory); + var successionAsUsageReader = new SuccessionAsUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return successionAsUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:SuccessionFlow"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:SuccessionFlow"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var successionFlowReader = new SuccessionFlowReader(cache, this, externalReferenceService, loggerFactory); + var successionFlowReader = new SuccessionFlowReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return successionFlowReader.Read(subXmlReader, currentLocation); }, - ["sysml:SuccessionFlowUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:SuccessionFlowUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var successionFlowUsageReader = new SuccessionFlowUsageReader(cache, this, externalReferenceService, loggerFactory); + var successionFlowUsageReader = new SuccessionFlowUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return successionFlowUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:TerminateActionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:TerminateActionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var terminateActionUsageReader = new TerminateActionUsageReader(cache, this, externalReferenceService, loggerFactory); + var terminateActionUsageReader = new TerminateActionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return terminateActionUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:TextualRepresentation"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:TextualRepresentation"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var textualRepresentationReader = new TextualRepresentationReader(cache, this, externalReferenceService, loggerFactory); + var textualRepresentationReader = new TextualRepresentationReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return textualRepresentationReader.Read(subXmlReader, currentLocation); }, - ["sysml:TransitionFeatureMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:TransitionFeatureMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var transitionFeatureMembershipReader = new TransitionFeatureMembershipReader(cache, this, externalReferenceService, loggerFactory); + var transitionFeatureMembershipReader = new TransitionFeatureMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return transitionFeatureMembershipReader.Read(subXmlReader, currentLocation); }, - ["sysml:TransitionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:TransitionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var transitionUsageReader = new TransitionUsageReader(cache, this, externalReferenceService, loggerFactory); + var transitionUsageReader = new TransitionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return transitionUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:TriggerInvocationExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:TriggerInvocationExpression"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var triggerInvocationExpressionReader = new TriggerInvocationExpressionReader(cache, this, externalReferenceService, loggerFactory); + var triggerInvocationExpressionReader = new TriggerInvocationExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return triggerInvocationExpressionReader.Read(subXmlReader, currentLocation); }, - ["sysml:Type"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Type"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var typeReader = new TypeReader(cache, this, externalReferenceService, loggerFactory); + var typeReader = new TypeReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return typeReader.Read(subXmlReader, currentLocation); }, - ["sysml:TypeFeaturing"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:TypeFeaturing"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var typeFeaturingReader = new TypeFeaturingReader(cache, this, externalReferenceService, loggerFactory); + var typeFeaturingReader = new TypeFeaturingReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return typeFeaturingReader.Read(subXmlReader, currentLocation); }, - ["sysml:Unioning"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Unioning"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var unioningReader = new UnioningReader(cache, this, externalReferenceService, loggerFactory); + var unioningReader = new UnioningReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return unioningReader.Read(subXmlReader, currentLocation); }, - ["sysml:Usage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Usage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var usageReader = new UsageReader(cache, this, externalReferenceService, loggerFactory); + var usageReader = new UsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return usageReader.Read(subXmlReader, currentLocation); }, - ["sysml:UseCaseDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:UseCaseDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var useCaseDefinitionReader = new UseCaseDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var useCaseDefinitionReader = new UseCaseDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return useCaseDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:UseCaseUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:UseCaseUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var useCaseUsageReader = new UseCaseUsageReader(cache, this, externalReferenceService, loggerFactory); + var useCaseUsageReader = new UseCaseUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return useCaseUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:VariantMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:VariantMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var variantMembershipReader = new VariantMembershipReader(cache, this, externalReferenceService, loggerFactory); + var variantMembershipReader = new VariantMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return variantMembershipReader.Read(subXmlReader, currentLocation); }, - ["sysml:VerificationCaseDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:VerificationCaseDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var verificationCaseDefinitionReader = new VerificationCaseDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var verificationCaseDefinitionReader = new VerificationCaseDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return verificationCaseDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:VerificationCaseUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:VerificationCaseUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var verificationCaseUsageReader = new VerificationCaseUsageReader(cache, this, externalReferenceService, loggerFactory); + var verificationCaseUsageReader = new VerificationCaseUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return verificationCaseUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:ViewDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ViewDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var viewDefinitionReader = new ViewDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var viewDefinitionReader = new ViewDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return viewDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:ViewpointDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ViewpointDefinition"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var viewpointDefinitionReader = new ViewpointDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var viewpointDefinitionReader = new ViewpointDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return viewpointDefinitionReader.Read(subXmlReader, currentLocation); }, - ["sysml:ViewpointUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ViewpointUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var viewpointUsageReader = new ViewpointUsageReader(cache, this, externalReferenceService, loggerFactory); + var viewpointUsageReader = new ViewpointUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return viewpointUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:ViewRenderingMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ViewRenderingMembership"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var viewRenderingMembershipReader = new ViewRenderingMembershipReader(cache, this, externalReferenceService, loggerFactory); + var viewRenderingMembershipReader = new ViewRenderingMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return viewRenderingMembershipReader.Read(subXmlReader, currentLocation); }, - ["sysml:ViewUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ViewUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var viewUsageReader = new ViewUsageReader(cache, this, externalReferenceService, loggerFactory); + var viewUsageReader = new ViewUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return viewUsageReader.Read(subXmlReader, currentLocation); }, - ["sysml:WhileLoopActionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:WhileLoopActionUsage"] = (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var whileLoopActionUsageReader = new WhileLoopActionUsageReader(cache, this, externalReferenceService, loggerFactory); + var whileLoopActionUsageReader = new WhileLoopActionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return whileLoopActionUsageReader.Read(subXmlReader, currentLocation); }, }; - this.readerAsyncCache = new Dictionary>> + this.readerAsyncCache = new Dictionary>> { - ["sysml:AcceptActionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AcceptActionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var acceptActionUsageReader = new AcceptActionUsageReader(cache, this, externalReferenceService, loggerFactory); + var acceptActionUsageReader = new AcceptActionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await acceptActionUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ActionDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ActionDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var actionDefinitionReader = new ActionDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var actionDefinitionReader = new ActionDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await actionDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ActionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ActionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var actionUsageReader = new ActionUsageReader(cache, this, externalReferenceService, loggerFactory); + var actionUsageReader = new ActionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await actionUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ActorMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ActorMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var actorMembershipReader = new ActorMembershipReader(cache, this, externalReferenceService, loggerFactory); + var actorMembershipReader = new ActorMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await actorMembershipReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:AllocationDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AllocationDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var allocationDefinitionReader = new AllocationDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var allocationDefinitionReader = new AllocationDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await allocationDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:AllocationUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AllocationUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var allocationUsageReader = new AllocationUsageReader(cache, this, externalReferenceService, loggerFactory); + var allocationUsageReader = new AllocationUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await allocationUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:AnalysisCaseDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AnalysisCaseDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var analysisCaseDefinitionReader = new AnalysisCaseDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var analysisCaseDefinitionReader = new AnalysisCaseDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await analysisCaseDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:AnalysisCaseUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AnalysisCaseUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var analysisCaseUsageReader = new AnalysisCaseUsageReader(cache, this, externalReferenceService, loggerFactory); + var analysisCaseUsageReader = new AnalysisCaseUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await analysisCaseUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:AnnotatingElement"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AnnotatingElement"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var annotatingElementReader = new AnnotatingElementReader(cache, this, externalReferenceService, loggerFactory); + var annotatingElementReader = new AnnotatingElementReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await annotatingElementReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Annotation"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Annotation"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var annotationReader = new AnnotationReader(cache, this, externalReferenceService, loggerFactory); + var annotationReader = new AnnotationReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await annotationReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:AssertConstraintUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AssertConstraintUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var assertConstraintUsageReader = new AssertConstraintUsageReader(cache, this, externalReferenceService, loggerFactory); + var assertConstraintUsageReader = new AssertConstraintUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await assertConstraintUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:AssignmentActionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AssignmentActionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var assignmentActionUsageReader = new AssignmentActionUsageReader(cache, this, externalReferenceService, loggerFactory); + var assignmentActionUsageReader = new AssignmentActionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await assignmentActionUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Association"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Association"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var associationReader = new AssociationReader(cache, this, externalReferenceService, loggerFactory); + var associationReader = new AssociationReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await associationReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:AssociationStructure"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AssociationStructure"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var associationStructureReader = new AssociationStructureReader(cache, this, externalReferenceService, loggerFactory); + var associationStructureReader = new AssociationStructureReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await associationStructureReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:AttributeDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AttributeDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var attributeDefinitionReader = new AttributeDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var attributeDefinitionReader = new AttributeDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await attributeDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:AttributeUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:AttributeUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var attributeUsageReader = new AttributeUsageReader(cache, this, externalReferenceService, loggerFactory); + var attributeUsageReader = new AttributeUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await attributeUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Behavior"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Behavior"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var behaviorReader = new BehaviorReader(cache, this, externalReferenceService, loggerFactory); + var behaviorReader = new BehaviorReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await behaviorReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:BindingConnector"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:BindingConnector"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var bindingConnectorReader = new BindingConnectorReader(cache, this, externalReferenceService, loggerFactory); + var bindingConnectorReader = new BindingConnectorReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await bindingConnectorReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:BindingConnectorAsUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:BindingConnectorAsUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var bindingConnectorAsUsageReader = new BindingConnectorAsUsageReader(cache, this, externalReferenceService, loggerFactory); + var bindingConnectorAsUsageReader = new BindingConnectorAsUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await bindingConnectorAsUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:BooleanExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:BooleanExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var booleanExpressionReader = new BooleanExpressionReader(cache, this, externalReferenceService, loggerFactory); + var booleanExpressionReader = new BooleanExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await booleanExpressionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:CalculationDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:CalculationDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var calculationDefinitionReader = new CalculationDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var calculationDefinitionReader = new CalculationDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await calculationDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:CalculationUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:CalculationUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var calculationUsageReader = new CalculationUsageReader(cache, this, externalReferenceService, loggerFactory); + var calculationUsageReader = new CalculationUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await calculationUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:CaseDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:CaseDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var caseDefinitionReader = new CaseDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var caseDefinitionReader = new CaseDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await caseDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:CaseUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:CaseUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var caseUsageReader = new CaseUsageReader(cache, this, externalReferenceService, loggerFactory); + var caseUsageReader = new CaseUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await caseUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Class"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Class"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var classReader = new ClassReader(cache, this, externalReferenceService, loggerFactory); + var classReader = new ClassReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await classReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Classifier"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Classifier"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var classifierReader = new ClassifierReader(cache, this, externalReferenceService, loggerFactory); + var classifierReader = new ClassifierReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await classifierReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:CollectExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:CollectExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var collectExpressionReader = new CollectExpressionReader(cache, this, externalReferenceService, loggerFactory); + var collectExpressionReader = new CollectExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await collectExpressionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Comment"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Comment"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var commentReader = new CommentReader(cache, this, externalReferenceService, loggerFactory); + var commentReader = new CommentReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await commentReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ConcernDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ConcernDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var concernDefinitionReader = new ConcernDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var concernDefinitionReader = new ConcernDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await concernDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ConcernUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ConcernUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var concernUsageReader = new ConcernUsageReader(cache, this, externalReferenceService, loggerFactory); + var concernUsageReader = new ConcernUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await concernUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ConjugatedPortDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ConjugatedPortDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var conjugatedPortDefinitionReader = new ConjugatedPortDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var conjugatedPortDefinitionReader = new ConjugatedPortDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await conjugatedPortDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ConjugatedPortTyping"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ConjugatedPortTyping"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var conjugatedPortTypingReader = new ConjugatedPortTypingReader(cache, this, externalReferenceService, loggerFactory); + var conjugatedPortTypingReader = new ConjugatedPortTypingReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await conjugatedPortTypingReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Conjugation"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Conjugation"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var conjugationReader = new ConjugationReader(cache, this, externalReferenceService, loggerFactory); + var conjugationReader = new ConjugationReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await conjugationReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ConnectionDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ConnectionDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var connectionDefinitionReader = new ConnectionDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var connectionDefinitionReader = new ConnectionDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await connectionDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ConnectionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ConnectionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var connectionUsageReader = new ConnectionUsageReader(cache, this, externalReferenceService, loggerFactory); + var connectionUsageReader = new ConnectionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await connectionUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Connector"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Connector"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var connectorReader = new ConnectorReader(cache, this, externalReferenceService, loggerFactory); + var connectorReader = new ConnectorReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await connectorReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ConstraintDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ConstraintDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var constraintDefinitionReader = new ConstraintDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var constraintDefinitionReader = new ConstraintDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await constraintDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ConstraintUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ConstraintUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var constraintUsageReader = new ConstraintUsageReader(cache, this, externalReferenceService, loggerFactory); + var constraintUsageReader = new ConstraintUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await constraintUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ConstructorExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ConstructorExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var constructorExpressionReader = new ConstructorExpressionReader(cache, this, externalReferenceService, loggerFactory); + var constructorExpressionReader = new ConstructorExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await constructorExpressionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:CrossSubsetting"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:CrossSubsetting"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var crossSubsettingReader = new CrossSubsettingReader(cache, this, externalReferenceService, loggerFactory); + var crossSubsettingReader = new CrossSubsettingReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await crossSubsettingReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:DataType"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:DataType"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var dataTypeReader = new DataTypeReader(cache, this, externalReferenceService, loggerFactory); + var dataTypeReader = new DataTypeReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await dataTypeReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:DecisionNode"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:DecisionNode"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var decisionNodeReader = new DecisionNodeReader(cache, this, externalReferenceService, loggerFactory); + var decisionNodeReader = new DecisionNodeReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await decisionNodeReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Definition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Definition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var definitionReader = new DefinitionReader(cache, this, externalReferenceService, loggerFactory); + var definitionReader = new DefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await definitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Dependency"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Dependency"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var dependencyReader = new DependencyReader(cache, this, externalReferenceService, loggerFactory); + var dependencyReader = new DependencyReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await dependencyReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Differencing"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Differencing"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var differencingReader = new DifferencingReader(cache, this, externalReferenceService, loggerFactory); + var differencingReader = new DifferencingReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await differencingReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Disjoining"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Disjoining"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var disjoiningReader = new DisjoiningReader(cache, this, externalReferenceService, loggerFactory); + var disjoiningReader = new DisjoiningReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await disjoiningReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Documentation"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Documentation"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var documentationReader = new DocumentationReader(cache, this, externalReferenceService, loggerFactory); + var documentationReader = new DocumentationReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await documentationReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ElementFilterMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ElementFilterMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var elementFilterMembershipReader = new ElementFilterMembershipReader(cache, this, externalReferenceService, loggerFactory); + var elementFilterMembershipReader = new ElementFilterMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await elementFilterMembershipReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:EndFeatureMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:EndFeatureMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var endFeatureMembershipReader = new EndFeatureMembershipReader(cache, this, externalReferenceService, loggerFactory); + var endFeatureMembershipReader = new EndFeatureMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await endFeatureMembershipReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:EnumerationDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:EnumerationDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var enumerationDefinitionReader = new EnumerationDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var enumerationDefinitionReader = new EnumerationDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await enumerationDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:EnumerationUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:EnumerationUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var enumerationUsageReader = new EnumerationUsageReader(cache, this, externalReferenceService, loggerFactory); + var enumerationUsageReader = new EnumerationUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await enumerationUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:EventOccurrenceUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:EventOccurrenceUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var eventOccurrenceUsageReader = new EventOccurrenceUsageReader(cache, this, externalReferenceService, loggerFactory); + var eventOccurrenceUsageReader = new EventOccurrenceUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await eventOccurrenceUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ExhibitStateUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ExhibitStateUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var exhibitStateUsageReader = new ExhibitStateUsageReader(cache, this, externalReferenceService, loggerFactory); + var exhibitStateUsageReader = new ExhibitStateUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await exhibitStateUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Expression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Expression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var expressionReader = new ExpressionReader(cache, this, externalReferenceService, loggerFactory); + var expressionReader = new ExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await expressionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Feature"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Feature"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var featureReader = new FeatureReader(cache, this, externalReferenceService, loggerFactory); + var featureReader = new FeatureReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await featureReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:FeatureChainExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FeatureChainExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var featureChainExpressionReader = new FeatureChainExpressionReader(cache, this, externalReferenceService, loggerFactory); + var featureChainExpressionReader = new FeatureChainExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await featureChainExpressionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:FeatureChaining"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FeatureChaining"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var featureChainingReader = new FeatureChainingReader(cache, this, externalReferenceService, loggerFactory); + var featureChainingReader = new FeatureChainingReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await featureChainingReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:FeatureInverting"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FeatureInverting"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var featureInvertingReader = new FeatureInvertingReader(cache, this, externalReferenceService, loggerFactory); + var featureInvertingReader = new FeatureInvertingReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await featureInvertingReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:FeatureMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FeatureMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var featureMembershipReader = new FeatureMembershipReader(cache, this, externalReferenceService, loggerFactory); + var featureMembershipReader = new FeatureMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await featureMembershipReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:FeatureReferenceExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FeatureReferenceExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var featureReferenceExpressionReader = new FeatureReferenceExpressionReader(cache, this, externalReferenceService, loggerFactory); + var featureReferenceExpressionReader = new FeatureReferenceExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await featureReferenceExpressionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:FeatureTyping"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FeatureTyping"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var featureTypingReader = new FeatureTypingReader(cache, this, externalReferenceService, loggerFactory); + var featureTypingReader = new FeatureTypingReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await featureTypingReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:FeatureValue"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FeatureValue"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var featureValueReader = new FeatureValueReader(cache, this, externalReferenceService, loggerFactory); + var featureValueReader = new FeatureValueReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await featureValueReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Flow"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Flow"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var flowReader = new FlowReader(cache, this, externalReferenceService, loggerFactory); + var flowReader = new FlowReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await flowReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:FlowDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FlowDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var flowDefinitionReader = new FlowDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var flowDefinitionReader = new FlowDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await flowDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:FlowEnd"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FlowEnd"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var flowEndReader = new FlowEndReader(cache, this, externalReferenceService, loggerFactory); + var flowEndReader = new FlowEndReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await flowEndReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:FlowUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FlowUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var flowUsageReader = new FlowUsageReader(cache, this, externalReferenceService, loggerFactory); + var flowUsageReader = new FlowUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await flowUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ForkNode"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ForkNode"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var forkNodeReader = new ForkNodeReader(cache, this, externalReferenceService, loggerFactory); + var forkNodeReader = new ForkNodeReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await forkNodeReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ForLoopActionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ForLoopActionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var forLoopActionUsageReader = new ForLoopActionUsageReader(cache, this, externalReferenceService, loggerFactory); + var forLoopActionUsageReader = new ForLoopActionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await forLoopActionUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:FramedConcernMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:FramedConcernMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var framedConcernMembershipReader = new FramedConcernMembershipReader(cache, this, externalReferenceService, loggerFactory); + var framedConcernMembershipReader = new FramedConcernMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await framedConcernMembershipReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Function"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Function"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var functionReader = new FunctionReader(cache, this, externalReferenceService, loggerFactory); + var functionReader = new FunctionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await functionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:IfActionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:IfActionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var ifActionUsageReader = new IfActionUsageReader(cache, this, externalReferenceService, loggerFactory); + var ifActionUsageReader = new IfActionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await ifActionUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:IncludeUseCaseUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:IncludeUseCaseUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var includeUseCaseUsageReader = new IncludeUseCaseUsageReader(cache, this, externalReferenceService, loggerFactory); + var includeUseCaseUsageReader = new IncludeUseCaseUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await includeUseCaseUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:IndexExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:IndexExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var indexExpressionReader = new IndexExpressionReader(cache, this, externalReferenceService, loggerFactory); + var indexExpressionReader = new IndexExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await indexExpressionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Interaction"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Interaction"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var interactionReader = new InteractionReader(cache, this, externalReferenceService, loggerFactory); + var interactionReader = new InteractionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await interactionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:InterfaceDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:InterfaceDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var interfaceDefinitionReader = new InterfaceDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var interfaceDefinitionReader = new InterfaceDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await interfaceDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:InterfaceUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:InterfaceUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var interfaceUsageReader = new InterfaceUsageReader(cache, this, externalReferenceService, loggerFactory); + var interfaceUsageReader = new InterfaceUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await interfaceUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Intersecting"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Intersecting"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var intersectingReader = new IntersectingReader(cache, this, externalReferenceService, loggerFactory); + var intersectingReader = new IntersectingReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await intersectingReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Invariant"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Invariant"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var invariantReader = new InvariantReader(cache, this, externalReferenceService, loggerFactory); + var invariantReader = new InvariantReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await invariantReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:InvocationExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:InvocationExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var invocationExpressionReader = new InvocationExpressionReader(cache, this, externalReferenceService, loggerFactory); + var invocationExpressionReader = new InvocationExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await invocationExpressionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ItemDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ItemDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var itemDefinitionReader = new ItemDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var itemDefinitionReader = new ItemDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await itemDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ItemUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ItemUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var itemUsageReader = new ItemUsageReader(cache, this, externalReferenceService, loggerFactory); + var itemUsageReader = new ItemUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await itemUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:JoinNode"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:JoinNode"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var joinNodeReader = new JoinNodeReader(cache, this, externalReferenceService, loggerFactory); + var joinNodeReader = new JoinNodeReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await joinNodeReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:LibraryPackage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:LibraryPackage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var libraryPackageReader = new LibraryPackageReader(cache, this, externalReferenceService, loggerFactory); + var libraryPackageReader = new LibraryPackageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await libraryPackageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:LiteralBoolean"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:LiteralBoolean"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var literalBooleanReader = new LiteralBooleanReader(cache, this, externalReferenceService, loggerFactory); + var literalBooleanReader = new LiteralBooleanReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await literalBooleanReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:LiteralExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:LiteralExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var literalExpressionReader = new LiteralExpressionReader(cache, this, externalReferenceService, loggerFactory); + var literalExpressionReader = new LiteralExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await literalExpressionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:LiteralInfinity"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:LiteralInfinity"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var literalInfinityReader = new LiteralInfinityReader(cache, this, externalReferenceService, loggerFactory); + var literalInfinityReader = new LiteralInfinityReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await literalInfinityReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:LiteralInteger"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:LiteralInteger"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var literalIntegerReader = new LiteralIntegerReader(cache, this, externalReferenceService, loggerFactory); + var literalIntegerReader = new LiteralIntegerReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await literalIntegerReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:LiteralRational"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:LiteralRational"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var literalRationalReader = new LiteralRationalReader(cache, this, externalReferenceService, loggerFactory); + var literalRationalReader = new LiteralRationalReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await literalRationalReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:LiteralString"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:LiteralString"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var literalStringReader = new LiteralStringReader(cache, this, externalReferenceService, loggerFactory); + var literalStringReader = new LiteralStringReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await literalStringReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Membership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Membership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var membershipReader = new MembershipReader(cache, this, externalReferenceService, loggerFactory); + var membershipReader = new MembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await membershipReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:MembershipExpose"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:MembershipExpose"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var membershipExposeReader = new MembershipExposeReader(cache, this, externalReferenceService, loggerFactory); + var membershipExposeReader = new MembershipExposeReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await membershipExposeReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:MembershipImport"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:MembershipImport"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var membershipImportReader = new MembershipImportReader(cache, this, externalReferenceService, loggerFactory); + var membershipImportReader = new MembershipImportReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await membershipImportReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:MergeNode"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:MergeNode"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var mergeNodeReader = new MergeNodeReader(cache, this, externalReferenceService, loggerFactory); + var mergeNodeReader = new MergeNodeReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await mergeNodeReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Metaclass"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Metaclass"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var metaclassReader = new MetaclassReader(cache, this, externalReferenceService, loggerFactory); + var metaclassReader = new MetaclassReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await metaclassReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:MetadataAccessExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:MetadataAccessExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var metadataAccessExpressionReader = new MetadataAccessExpressionReader(cache, this, externalReferenceService, loggerFactory); + var metadataAccessExpressionReader = new MetadataAccessExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await metadataAccessExpressionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:MetadataDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:MetadataDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var metadataDefinitionReader = new MetadataDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var metadataDefinitionReader = new MetadataDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await metadataDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:MetadataFeature"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:MetadataFeature"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var metadataFeatureReader = new MetadataFeatureReader(cache, this, externalReferenceService, loggerFactory); + var metadataFeatureReader = new MetadataFeatureReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await metadataFeatureReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:MetadataUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:MetadataUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var metadataUsageReader = new MetadataUsageReader(cache, this, externalReferenceService, loggerFactory); + var metadataUsageReader = new MetadataUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await metadataUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Multiplicity"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Multiplicity"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var multiplicityReader = new MultiplicityReader(cache, this, externalReferenceService, loggerFactory); + var multiplicityReader = new MultiplicityReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await multiplicityReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:MultiplicityRange"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:MultiplicityRange"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var multiplicityRangeReader = new MultiplicityRangeReader(cache, this, externalReferenceService, loggerFactory); + var multiplicityRangeReader = new MultiplicityRangeReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await multiplicityRangeReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Namespace"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Namespace"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var namespaceReader = new NamespaceReader(cache, this, externalReferenceService, loggerFactory); + var namespaceReader = new NamespaceReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await namespaceReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:NamespaceExpose"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:NamespaceExpose"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var namespaceExposeReader = new NamespaceExposeReader(cache, this, externalReferenceService, loggerFactory); + var namespaceExposeReader = new NamespaceExposeReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await namespaceExposeReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:NamespaceImport"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:NamespaceImport"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var namespaceImportReader = new NamespaceImportReader(cache, this, externalReferenceService, loggerFactory); + var namespaceImportReader = new NamespaceImportReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await namespaceImportReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:NullExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:NullExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var nullExpressionReader = new NullExpressionReader(cache, this, externalReferenceService, loggerFactory); + var nullExpressionReader = new NullExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await nullExpressionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ObjectiveMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ObjectiveMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var objectiveMembershipReader = new ObjectiveMembershipReader(cache, this, externalReferenceService, loggerFactory); + var objectiveMembershipReader = new ObjectiveMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await objectiveMembershipReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:OccurrenceDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:OccurrenceDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var occurrenceDefinitionReader = new OccurrenceDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var occurrenceDefinitionReader = new OccurrenceDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await occurrenceDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:OccurrenceUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:OccurrenceUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var occurrenceUsageReader = new OccurrenceUsageReader(cache, this, externalReferenceService, loggerFactory); + var occurrenceUsageReader = new OccurrenceUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await occurrenceUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:OperatorExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:OperatorExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var operatorExpressionReader = new OperatorExpressionReader(cache, this, externalReferenceService, loggerFactory); + var operatorExpressionReader = new OperatorExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await operatorExpressionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:OwningMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:OwningMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var owningMembershipReader = new OwningMembershipReader(cache, this, externalReferenceService, loggerFactory); + var owningMembershipReader = new OwningMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await owningMembershipReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Package"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Package"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var packageReader = new PackageReader(cache, this, externalReferenceService, loggerFactory); + var packageReader = new PackageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await packageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ParameterMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ParameterMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var parameterMembershipReader = new ParameterMembershipReader(cache, this, externalReferenceService, loggerFactory); + var parameterMembershipReader = new ParameterMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await parameterMembershipReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:PartDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:PartDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var partDefinitionReader = new PartDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var partDefinitionReader = new PartDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await partDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:PartUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:PartUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var partUsageReader = new PartUsageReader(cache, this, externalReferenceService, loggerFactory); + var partUsageReader = new PartUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await partUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:PayloadFeature"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:PayloadFeature"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var payloadFeatureReader = new PayloadFeatureReader(cache, this, externalReferenceService, loggerFactory); + var payloadFeatureReader = new PayloadFeatureReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await payloadFeatureReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:PerformActionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:PerformActionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var performActionUsageReader = new PerformActionUsageReader(cache, this, externalReferenceService, loggerFactory); + var performActionUsageReader = new PerformActionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await performActionUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:PortConjugation"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:PortConjugation"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var portConjugationReader = new PortConjugationReader(cache, this, externalReferenceService, loggerFactory); + var portConjugationReader = new PortConjugationReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await portConjugationReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:PortDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:PortDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var portDefinitionReader = new PortDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var portDefinitionReader = new PortDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await portDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:PortUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:PortUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var portUsageReader = new PortUsageReader(cache, this, externalReferenceService, loggerFactory); + var portUsageReader = new PortUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await portUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Predicate"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Predicate"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var predicateReader = new PredicateReader(cache, this, externalReferenceService, loggerFactory); + var predicateReader = new PredicateReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await predicateReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Redefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Redefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var redefinitionReader = new RedefinitionReader(cache, this, externalReferenceService, loggerFactory); + var redefinitionReader = new RedefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await redefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ReferenceSubsetting"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ReferenceSubsetting"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var referenceSubsettingReader = new ReferenceSubsettingReader(cache, this, externalReferenceService, loggerFactory); + var referenceSubsettingReader = new ReferenceSubsettingReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await referenceSubsettingReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ReferenceUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ReferenceUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var referenceUsageReader = new ReferenceUsageReader(cache, this, externalReferenceService, loggerFactory); + var referenceUsageReader = new ReferenceUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await referenceUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:RenderingDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:RenderingDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var renderingDefinitionReader = new RenderingDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var renderingDefinitionReader = new RenderingDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await renderingDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:RenderingUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:RenderingUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var renderingUsageReader = new RenderingUsageReader(cache, this, externalReferenceService, loggerFactory); + var renderingUsageReader = new RenderingUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await renderingUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:RequirementConstraintMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:RequirementConstraintMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var requirementConstraintMembershipReader = new RequirementConstraintMembershipReader(cache, this, externalReferenceService, loggerFactory); + var requirementConstraintMembershipReader = new RequirementConstraintMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await requirementConstraintMembershipReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:RequirementDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:RequirementDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var requirementDefinitionReader = new RequirementDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var requirementDefinitionReader = new RequirementDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await requirementDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:RequirementUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:RequirementUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var requirementUsageReader = new RequirementUsageReader(cache, this, externalReferenceService, loggerFactory); + var requirementUsageReader = new RequirementUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await requirementUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:RequirementVerificationMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:RequirementVerificationMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var requirementVerificationMembershipReader = new RequirementVerificationMembershipReader(cache, this, externalReferenceService, loggerFactory); + var requirementVerificationMembershipReader = new RequirementVerificationMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await requirementVerificationMembershipReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ResultExpressionMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ResultExpressionMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var resultExpressionMembershipReader = new ResultExpressionMembershipReader(cache, this, externalReferenceService, loggerFactory); + var resultExpressionMembershipReader = new ResultExpressionMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await resultExpressionMembershipReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ReturnParameterMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ReturnParameterMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var returnParameterMembershipReader = new ReturnParameterMembershipReader(cache, this, externalReferenceService, loggerFactory); + var returnParameterMembershipReader = new ReturnParameterMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await returnParameterMembershipReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:SatisfyRequirementUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:SatisfyRequirementUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var satisfyRequirementUsageReader = new SatisfyRequirementUsageReader(cache, this, externalReferenceService, loggerFactory); + var satisfyRequirementUsageReader = new SatisfyRequirementUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await satisfyRequirementUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:SelectExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:SelectExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var selectExpressionReader = new SelectExpressionReader(cache, this, externalReferenceService, loggerFactory); + var selectExpressionReader = new SelectExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await selectExpressionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:SendActionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:SendActionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var sendActionUsageReader = new SendActionUsageReader(cache, this, externalReferenceService, loggerFactory); + var sendActionUsageReader = new SendActionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await sendActionUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Specialization"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Specialization"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var specializationReader = new SpecializationReader(cache, this, externalReferenceService, loggerFactory); + var specializationReader = new SpecializationReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await specializationReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:StakeholderMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:StakeholderMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var stakeholderMembershipReader = new StakeholderMembershipReader(cache, this, externalReferenceService, loggerFactory); + var stakeholderMembershipReader = new StakeholderMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await stakeholderMembershipReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:StateDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:StateDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var stateDefinitionReader = new StateDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var stateDefinitionReader = new StateDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await stateDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:StateSubactionMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:StateSubactionMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var stateSubactionMembershipReader = new StateSubactionMembershipReader(cache, this, externalReferenceService, loggerFactory); + var stateSubactionMembershipReader = new StateSubactionMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await stateSubactionMembershipReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:StateUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:StateUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var stateUsageReader = new StateUsageReader(cache, this, externalReferenceService, loggerFactory); + var stateUsageReader = new StateUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await stateUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Step"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Step"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var stepReader = new StepReader(cache, this, externalReferenceService, loggerFactory); + var stepReader = new StepReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await stepReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Structure"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Structure"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var structureReader = new StructureReader(cache, this, externalReferenceService, loggerFactory); + var structureReader = new StructureReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await structureReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Subclassification"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Subclassification"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var subclassificationReader = new SubclassificationReader(cache, this, externalReferenceService, loggerFactory); + var subclassificationReader = new SubclassificationReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await subclassificationReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:SubjectMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:SubjectMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var subjectMembershipReader = new SubjectMembershipReader(cache, this, externalReferenceService, loggerFactory); + var subjectMembershipReader = new SubjectMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await subjectMembershipReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Subsetting"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Subsetting"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var subsettingReader = new SubsettingReader(cache, this, externalReferenceService, loggerFactory); + var subsettingReader = new SubsettingReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await subsettingReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Succession"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Succession"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var successionReader = new SuccessionReader(cache, this, externalReferenceService, loggerFactory); + var successionReader = new SuccessionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await successionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:SuccessionAsUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:SuccessionAsUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var successionAsUsageReader = new SuccessionAsUsageReader(cache, this, externalReferenceService, loggerFactory); + var successionAsUsageReader = new SuccessionAsUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await successionAsUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:SuccessionFlow"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:SuccessionFlow"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var successionFlowReader = new SuccessionFlowReader(cache, this, externalReferenceService, loggerFactory); + var successionFlowReader = new SuccessionFlowReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await successionFlowReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:SuccessionFlowUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:SuccessionFlowUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var successionFlowUsageReader = new SuccessionFlowUsageReader(cache, this, externalReferenceService, loggerFactory); + var successionFlowUsageReader = new SuccessionFlowUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await successionFlowUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:TerminateActionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:TerminateActionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var terminateActionUsageReader = new TerminateActionUsageReader(cache, this, externalReferenceService, loggerFactory); + var terminateActionUsageReader = new TerminateActionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await terminateActionUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:TextualRepresentation"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:TextualRepresentation"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var textualRepresentationReader = new TextualRepresentationReader(cache, this, externalReferenceService, loggerFactory); + var textualRepresentationReader = new TextualRepresentationReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await textualRepresentationReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:TransitionFeatureMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:TransitionFeatureMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var transitionFeatureMembershipReader = new TransitionFeatureMembershipReader(cache, this, externalReferenceService, loggerFactory); + var transitionFeatureMembershipReader = new TransitionFeatureMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await transitionFeatureMembershipReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:TransitionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:TransitionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var transitionUsageReader = new TransitionUsageReader(cache, this, externalReferenceService, loggerFactory); + var transitionUsageReader = new TransitionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await transitionUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:TriggerInvocationExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:TriggerInvocationExpression"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var triggerInvocationExpressionReader = new TriggerInvocationExpressionReader(cache, this, externalReferenceService, loggerFactory); + var triggerInvocationExpressionReader = new TriggerInvocationExpressionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await triggerInvocationExpressionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Type"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Type"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var typeReader = new TypeReader(cache, this, externalReferenceService, loggerFactory); + var typeReader = new TypeReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await typeReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:TypeFeaturing"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:TypeFeaturing"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var typeFeaturingReader = new TypeFeaturingReader(cache, this, externalReferenceService, loggerFactory); + var typeFeaturingReader = new TypeFeaturingReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await typeFeaturingReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Unioning"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Unioning"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var unioningReader = new UnioningReader(cache, this, externalReferenceService, loggerFactory); + var unioningReader = new UnioningReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await unioningReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:Usage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:Usage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var usageReader = new UsageReader(cache, this, externalReferenceService, loggerFactory); + var usageReader = new UsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await usageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:UseCaseDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:UseCaseDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var useCaseDefinitionReader = new UseCaseDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var useCaseDefinitionReader = new UseCaseDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await useCaseDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:UseCaseUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:UseCaseUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var useCaseUsageReader = new UseCaseUsageReader(cache, this, externalReferenceService, loggerFactory); + var useCaseUsageReader = new UseCaseUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await useCaseUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:VariantMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:VariantMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var variantMembershipReader = new VariantMembershipReader(cache, this, externalReferenceService, loggerFactory); + var variantMembershipReader = new VariantMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await variantMembershipReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:VerificationCaseDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:VerificationCaseDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var verificationCaseDefinitionReader = new VerificationCaseDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var verificationCaseDefinitionReader = new VerificationCaseDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await verificationCaseDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:VerificationCaseUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:VerificationCaseUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var verificationCaseUsageReader = new VerificationCaseUsageReader(cache, this, externalReferenceService, loggerFactory); + var verificationCaseUsageReader = new VerificationCaseUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await verificationCaseUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ViewDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ViewDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var viewDefinitionReader = new ViewDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var viewDefinitionReader = new ViewDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await viewDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ViewpointDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ViewpointDefinition"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var viewpointDefinitionReader = new ViewpointDefinitionReader(cache, this, externalReferenceService, loggerFactory); + var viewpointDefinitionReader = new ViewpointDefinitionReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await viewpointDefinitionReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ViewpointUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ViewpointUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var viewpointUsageReader = new ViewpointUsageReader(cache, this, externalReferenceService, loggerFactory); + var viewpointUsageReader = new ViewpointUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await viewpointUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ViewRenderingMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ViewRenderingMembership"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var viewRenderingMembershipReader = new ViewRenderingMembershipReader(cache, this, externalReferenceService, loggerFactory); + var viewRenderingMembershipReader = new ViewRenderingMembershipReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await viewRenderingMembershipReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:ViewUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:ViewUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var viewUsageReader = new ViewUsageReader(cache, this, externalReferenceService, loggerFactory); + var viewUsageReader = new ViewUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await viewUsageReader.ReadAsync(subXmlReader, currentLocation); }, - ["sysml:WhileLoopActionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation) => + ["sysml:WhileLoopActionUsage"] = async (cache, externalReferenceService, loggerFactory, xmlReader, currentLocation, elementOriginMap) => { using var subXmlReader = xmlReader.ReadSubtree(); - var whileLoopActionUsageReader = new WhileLoopActionUsageReader(cache, this, externalReferenceService, loggerFactory); + var whileLoopActionUsageReader = new WhileLoopActionUsageReader(cache, this, externalReferenceService, loggerFactory, elementOriginMap); return await whileLoopActionUsageReader.ReadAsync(subXmlReader, currentLocation); }, }; @@ -2083,7 +2083,7 @@ public XmiDataReaderFacade() /// The explicit type name to resolve, in case of un-specified xsi:type /// An instance of the read /// If the xsi:type is not supported - public IData QueryXmiData(XmlReader xmiReader, IXmiDataCache xmiDataCache, Uri currentLocation, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, string explicitTypeName = "") + public IData QueryXmiData(XmlReader xmiReader, IXmiDataCache xmiDataCache, Uri currentLocation, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, string explicitTypeName = "", IXmiElementOriginMap elementOriginMap = null) { AssertValidQueryXmiDataParameters(xmiReader, xmiDataCache, currentLocation); @@ -2098,7 +2098,7 @@ public IData QueryXmiData(XmlReader xmiReader, IXmiDataCache xmiDataCache, Uri c if (this.readerCache.TryGetValue(xsiType, out var readerFactory)) { - return readerFactory(xmiDataCache, externalReferenceService, loggerFactory, xmiReader, currentLocation); + return readerFactory(xmiDataCache, externalReferenceService, loggerFactory, xmiReader, currentLocation, elementOriginMap); } throw new InvalidOperationException($"No reader found for xsi:type - {xsiType}"); @@ -2117,7 +2117,7 @@ public IData QueryXmiData(XmlReader xmiReader, IXmiDataCache xmiDataCache, Uri c /// The explicit type name to resolve, in case of un-specified xsi:type /// An awaitable with the instance of the read /// If the xsi:type is not supported - public Task QueryXmiDataAsync(XmlReader xmiReader, IXmiDataCache xmiDataCache, Uri currentLocation, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, string explicitTypeName = "") + public Task QueryXmiDataAsync(XmlReader xmiReader, IXmiDataCache xmiDataCache, Uri currentLocation, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, string explicitTypeName = "", IXmiElementOriginMap elementOriginMap = null) { AssertValidQueryXmiDataParameters(xmiReader, xmiDataCache, currentLocation); @@ -2132,7 +2132,7 @@ public Task QueryXmiDataAsync(XmlReader xmiReader, IXmiDataCache xmiDataC if (this.readerAsyncCache.TryGetValue(xsiType, out var readerFactory)) { - return readerFactory(xmiDataCache, externalReferenceService, loggerFactory, xmiReader, currentLocation); + return readerFactory(xmiDataCache, externalReferenceService, loggerFactory, xmiReader, currentLocation, elementOriginMap); } throw new InvalidOperationException($"No reader found for xsi:type - {xsiType}"); diff --git a/SysML2.NET.Serializer.Xmi/Readers/IXmiDataReaderFacade.cs b/SysML2.NET.Serializer.Xmi/Readers/IXmiDataReaderFacade.cs index 9ea0b5cfa..1e1c8e6f6 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/IXmiDataReaderFacade.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/IXmiDataReaderFacade.cs @@ -44,9 +44,10 @@ public interface IXmiDataReaderFacade /// The used to register and process external references /// The used to set up logging /// The explicit type name to resolve, in case of un-specified xsi:type + /// The optional used to track element-to-file associations /// An instance of the read /// If the xsi:type is not supported - IData QueryXmiData(XmlReader xmiReader, IXmiDataCache xmiDataCache, Uri currentLocation, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, string explicitTypeName = ""); + IData QueryXmiData(XmlReader xmiReader, IXmiDataCache xmiDataCache, Uri currentLocation, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, string explicitTypeName = "", IXmiElementOriginMap elementOriginMap = null); /// /// Queries asynchronously an instance of an based on the position of the . @@ -59,8 +60,9 @@ public interface IXmiDataReaderFacade /// The used to register and process external references /// The used to set up logging /// The explicit type name to resolve, in case of un-specified xsi:type + /// The optional used to track element-to-file associations /// An awaitable with the instance of the read /// If the xsi:type is not supported - Task QueryXmiDataAsync(XmlReader xmiReader, IXmiDataCache xmiDataCache, Uri currentLocation, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, string explicitTypeName = ""); + Task QueryXmiDataAsync(XmlReader xmiReader, IXmiDataCache xmiDataCache, Uri currentLocation, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, string explicitTypeName = "", IXmiElementOriginMap elementOriginMap = null); } } diff --git a/SysML2.NET.Serializer.Xmi/Readers/XmiDataReader.cs b/SysML2.NET.Serializer.Xmi/Readers/XmiDataReader.cs index cb1554f4e..02ed4305c 100644 --- a/SysML2.NET.Serializer.Xmi/Readers/XmiDataReader.cs +++ b/SysML2.NET.Serializer.Xmi/Readers/XmiDataReader.cs @@ -54,6 +54,11 @@ public abstract class XmiDataReader where TData : IData /// protected readonly IExternalReferenceService ExternalReferenceService; + /// + /// The optional used to track element-to-file associations + /// + protected readonly IXmiElementOriginMap ElementOriginMap; + /// /// the character used to split the values (of xml attributes) using a white space as separator /// @@ -69,12 +74,14 @@ public abstract class XmiDataReader where TData : IData /// /// The injected used to register and process external references /// The injected used to set up logging - protected XmiDataReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory) + /// The optional used to track element-to-file associations + protected XmiDataReader(IXmiDataCache cache, IXmiDataReaderFacade xmiDataReaderFacade, IExternalReferenceService externalReferenceService, ILoggerFactory loggerFactory, IXmiElementOriginMap elementOriginMap = null) { this.LoggerFactory = loggerFactory; this.XmiDataReaderFacade = xmiDataReaderFacade; this.Cache = cache; this.ExternalReferenceService = externalReferenceService; + this.ElementOriginMap = elementOriginMap; } /// diff --git a/SysML2.NET.Serializer.Xmi/Serializer.cs b/SysML2.NET.Serializer.Xmi/Serializer.cs new file mode 100644 index 000000000..c797628a0 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Serializer.cs @@ -0,0 +1,359 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi +{ + using System; + using System.IO; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Serializer.Xmi.Writers; + + /// + /// The purpose of the is to write an + /// as XMI to a + /// + public class Serializer : ISerializer + { + /// + /// Gets the URI of the XMI namespace location + /// + private const string XmiNamespace = "http://www.omg.org/spec/XMI/20131001"; + + /// + /// Gets the URI of the XSI namespace location + /// + private const string XsiNamespace = "http://www.w3.org/2001/XMLSchema-instance"; + + /// + /// Gets the URI of the SysML namespace location + /// + private const string SysmlNamespace = "https://www.omg.org/spec/SysML/20250201"; + + /// + /// Gets the instance to perform logging statement + /// + private readonly ILogger logger; + + /// + /// Gets the instance used to set up logging + /// + private readonly ILoggerFactory loggerFactory; + + /// + /// Gets the to dispatch writing + /// + private readonly IXmiDataWriterFacade xmiWriterFacade; + + /// Initializes a new instance of the class. + /// The injected used to set up logging + public Serializer(ILoggerFactory loggerFactory) + { + this.loggerFactory = loggerFactory ?? NullLoggerFactory.Instance; + this.logger = this.loggerFactory.CreateLogger(); + this.xmiWriterFacade = new XmiDataWriterFacade(this.loggerFactory); + } + + /// + /// Serialize an as XMI to a target + /// + /// + /// The that shall be serialized + /// + /// The instance that provides writer output configuration + /// + /// The target + /// + public void Serialize(INamespace @namespace, XmiWriterOptions writerOptions, Stream stream) + { + this.Serialize(@namespace, writerOptions, stream, null, null); + } + + /// + /// Serialize an as XMI to a target , + /// using an origin map for href reconstruction + /// + /// + /// The that shall be serialized + /// + /// The instance that provides writer output configuration + /// + /// The target + /// + /// + /// The optional for href reconstruction + /// + /// + /// The optional of the current output file for relative href computation + /// + public void Serialize(INamespace @namespace, XmiWriterOptions writerOptions, Stream stream, IXmiElementOriginMap elementOriginMap, Uri currentFileUri) + { + if (@namespace == null) + { + throw new ArgumentNullException(nameof(@namespace)); + } + + if (stream == null) + { + throw new ArgumentNullException(nameof(stream)); + } + + writerOptions ??= new XmiWriterOptions(); + + var settings = new XmlWriterSettings + { + Indent = true, + IndentChars = " ", + NewLineChars = "\n", + NewLineHandling = NewLineHandling.Replace, + OmitXmlDeclaration = false, + Encoding = new System.Text.UTF8Encoding(false) + }; + + using var xmlWriter = XmlWriter.Create(stream, settings); + + this.logger.LogInformation("Starting XMI serialization"); + + xmlWriter.WriteStartDocument(); + + this.WriteNamespaceElement(xmlWriter, @namespace, elementOriginMap, currentFileUri, writerOptions); + + xmlWriter.WriteEndDocument(); + xmlWriter.Flush(); + + this.logger.LogInformation("XMI serialization completed"); + } + + /// + /// Asynchronously serialize an as XMI to a target + /// + /// + /// The that shall be serialized + /// + /// + /// The target + /// + /// The instance that provides writer output configuration + /// + /// The used to cancel the operation + /// + public Task SerializeAsync(INamespace @namespace, XmiWriterOptions writerOptions, Stream stream, CancellationToken cancellationToken) + { + return Task.Run(() => this.Serialize(@namespace, writerOptions, stream), cancellationToken); + } + + /// + /// Serialize an to multiple XMI files based on the element origin map + /// + /// The root containing all elements + /// The tracking element-to-file associations + /// The target directory for output files + /// The instance that provides writer output configuration + public void Serialize(INamespace rootNamespace, IXmiElementOriginMap elementOriginMap, DirectoryInfo outputDirectory, XmiWriterOptions writerOptions) + { + if (rootNamespace == null) + { + throw new ArgumentNullException(nameof(rootNamespace)); + } + + if (elementOriginMap == null) + { + throw new ArgumentNullException(nameof(elementOriginMap)); + } + + if (outputDirectory == null) + { + throw new ArgumentNullException(nameof(outputDirectory)); + } + + writerOptions ??= new XmiWriterOptions(); + + if (!outputDirectory.Exists) + { + outputDirectory.Create(); + } + + var sourceFiles = elementOriginMap.GetAllSourceFiles().ToList(); + + this.logger.LogInformation("Starting multi-file XMI serialization for {FileCount} files", sourceFiles.Count); + + foreach (var sourceFile in sourceFiles) + { + var rootNamespaceId = elementOriginMap.GetRootNamespaceId(sourceFile); + + if (rootNamespaceId == Guid.Empty) + { + this.logger.LogWarning("No root namespace found for source file {SourceFile}", sourceFile); + continue; + } + + // Compute relative path from original source structure + var fileName = Path.GetFileName(sourceFile.LocalPath); + var outputPath = Path.Combine(outputDirectory.FullName, fileName); + var outputUri = new Uri(outputPath); + + this.logger.LogInformation("Writing {FileName}", fileName); + + // Find the namespace POCO for this file's root namespace + var fileRootNamespace = FindNamespaceById(rootNamespace, rootNamespaceId); + + if (fileRootNamespace == null) + { + this.logger.LogWarning("Could not find namespace with id {NamespaceId} for file {SourceFile}", rootNamespaceId, sourceFile); + continue; + } + + using var fileStream = new FileStream(outputPath, FileMode.Create, FileAccess.Write); + this.Serialize(fileRootNamespace, writerOptions, fileStream, elementOriginMap, outputUri); + } + + this.logger.LogInformation("Multi-file XMI serialization completed"); + } + + /// + /// Writes the the XML content for the root + /// + /// The instance that provides XMI write features + /// The root to write + /// The tracking element-to-file associations + /// The that locates the output file + /// The instance that provides writer output configuration + private void WriteNamespaceElement(XmlWriter xmlWriter, INamespace @namespace, IXmiElementOriginMap elementOriginMap, Uri currentFileUri, XmiWriterOptions writerOptions) + { + xmlWriter.WriteStartElement("sysml", "Namespace", SysmlNamespace); + xmlWriter.WriteAttributeString("xmlns", "xmi", null, XmiNamespace); + xmlWriter.WriteAttributeString("xmlns", "xsi", null, XsiNamespace); + xmlWriter.WriteAttributeString("xmi", "id", XmiNamespace, @namespace.Id.ToString()); + + // Write scalar properties + if (@namespace.AliasIds != null && @namespace.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", @namespace.AliasIds)); + } + + if (!string.IsNullOrEmpty(@namespace.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", @namespace.DeclaredName); + } + + if (!string.IsNullOrEmpty(@namespace.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", @namespace.DeclaredShortName); + } + + if (!string.IsNullOrEmpty(@namespace.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", @namespace.ElementId); + } + + if (writerOptions.IncludeImplied || @namespace.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + // Write owned relationships as child elements + if (@namespace.OwnedRelationship != null) + { + foreach (var relationship in @namespace.OwnedRelationship) + { + if (!writerOptions.IncludeImplied && relationship is { IsImplied: true }) + { + continue; + } + + if (relationship is IData relationshipData) + { + if (elementOriginMap != null && currentFileUri != null) + { + var childSourceFile = elementOriginMap.GetSourceFile(relationshipData.Id); + + if (childSourceFile != null && childSourceFile != currentFileUri) + { + var relativePath = currentFileUri.MakeRelativeUri(childSourceFile); + var href = $"{Uri.UnescapeDataString(relativePath.ToString())}#{relationshipData.Id}"; + + xmlWriter.WriteStartElement("ownedRelationship"); + xmlWriter.WriteAttributeString("href", href); + xmlWriter.WriteEndElement(); + continue; + } + } + + this.xmiWriterFacade.Write(xmlWriter, relationshipData, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + xmlWriter.WriteEndElement(); + } + + /// + /// Finds a based on its + /// + /// The root used as starting point of the find operation + /// The identifier + /// The if found, null otherwise + private static INamespace FindNamespaceById(INamespace root, Guid id) + { + if (root.Id == id) + { + return root; + } + + if (root.OwnedRelationship == null) + { + return null; + } + + foreach (var relationship in root.OwnedRelationship) + { + if (relationship is IElement element) + { + if (element.OwnedRelationship != null) + { + foreach (var child in element.OwnedRelationship) + { + if (child is INamespace childNamespace) + { + var found = FindNamespaceById(childNamespace, id); + + if (found != null) + { + return found; + } + } + } + } + } + } + + return null; + } + } +} diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AcceptActionUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AcceptActionUsageWriter.cs new file mode 100644 index 000000000..a8b9fb1b3 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AcceptActionUsageWriter.cs @@ -0,0 +1,2583 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class AcceptActionUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public AcceptActionUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IAcceptActionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:AcceptActionUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.payloadArgument != null && poco.payloadArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("payloadArgument", poco.payloadArgument.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.payloadParameter != null && poco.payloadParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("payloadParameter", poco.payloadParameter.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.receiverArgument != null && poco.receiverArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("receiverArgument", poco.receiverArgument.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.payloadArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.payloadArgument, "payloadArgument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.payloadParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.payloadParameter, "payloadParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.receiverArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.receiverArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.receiverArgument, "receiverArgument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IAcceptActionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:AcceptActionUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.payloadArgument != null && poco.payloadArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "payloadArgument", null, poco.payloadArgument.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.payloadParameter != null && poco.payloadParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "payloadParameter", null, poco.payloadParameter.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.receiverArgument != null && poco.receiverArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "receiverArgument", null, poco.receiverArgument.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.payloadArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.payloadArgument, "payloadArgument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.payloadParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.payloadParameter, "payloadParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.receiverArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.receiverArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.receiverArgument, "receiverArgument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ActionDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ActionDefinitionWriter.cs new file mode 100644 index 000000000..dc3a2de1c --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ActionDefinitionWriter.cs @@ -0,0 +1,1859 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ActionDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ActionDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IActionDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ActionDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.action != null) + { + foreach (var item in poco.action) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "action", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IActionDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ActionDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.action != null) + { + foreach (var item in poco.action) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "action", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ActionUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ActionUsageWriter.cs new file mode 100644 index 000000000..bf7cf9a75 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ActionUsageWriter.cs @@ -0,0 +1,2468 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ActionUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ActionUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IActionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ActionUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IActionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ActionUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ActorMembershipWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ActorMembershipWriter.cs new file mode 100644 index 000000000..5c84d00f8 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ActorMembershipWriter.cs @@ -0,0 +1,553 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ActorMembershipWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ActorMembershipWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IActorMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ActorMembership"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedActorParameter != null && poco.ownedActorParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedActorParameter", poco.ownedActorParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + xmlWriter.WriteAttributeString("ownedMemberElementId", poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + xmlWriter.WriteAttributeString("ownedMemberName", poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + xmlWriter.WriteAttributeString("ownedMemberShortName", poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedActorParameter != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedActorParameter, "ownedActorParameter", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IActorMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ActorMembership"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedActorParameter != null && poco.ownedActorParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedActorParameter", null, poco.ownedActorParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberElementId", null, poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberName", null, poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberShortName", null, poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedActorParameter != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedActorParameter, "ownedActorParameter", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AllocationDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AllocationDefinitionWriter.cs new file mode 100644 index 000000000..a1676935c --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AllocationDefinitionWriter.cs @@ -0,0 +1,1945 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Associations; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class AllocationDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public AllocationDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IAllocationDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:AllocationDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (!poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceType != null && poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceType", poco.sourceType.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.allocation != null) + { + foreach (var item in poco.allocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "allocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectionEnd != null) + { + foreach (var item in poco.connectionEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "connectionEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedType != null) + { + foreach (var item in poco.relatedType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceType, "sourceType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetType != null) + { + foreach (var item in poco.targetType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "targetType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IAllocationDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:AllocationDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (!poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceType != null && poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceType", null, poco.sourceType.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.allocation != null) + { + foreach (var item in poco.allocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "allocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectionEnd != null) + { + foreach (var item in poco.connectionEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "connectionEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedType != null) + { + foreach (var item in poco.relatedType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceType, "sourceType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetType != null) + { + foreach (var item in poco.targetType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "targetType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AllocationUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AllocationUsageWriter.cs new file mode 100644 index 000000000..69fdbff4e --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AllocationUsageWriter.cs @@ -0,0 +1,2660 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Associations; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Connectors; + using SysML2.NET.Core.POCO.Kernel.Structures; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class AllocationUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public AllocationUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IAllocationUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:AllocationUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("defaultFeaturingType", poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceFeature", poco.sourceFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.allocationDefinition != null) + { + foreach (var item in poco.allocationDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "allocationDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.itemDefinition != null) + { + foreach (var item in poco.itemDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "itemDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.partDefinition != null) + { + foreach (var item in poco.partDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "partDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IAllocationUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:AllocationUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "defaultFeaturingType", null, poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceFeature", null, poco.sourceFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.allocationDefinition != null) + { + foreach (var item in poco.allocationDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "allocationDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.itemDefinition != null) + { + foreach (var item in poco.itemDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "itemDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.partDefinition != null) + { + foreach (var item in poco.partDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "partDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AnalysisCaseDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AnalysisCaseDefinitionWriter.cs new file mode 100644 index 000000000..c59e1e523 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AnalysisCaseDefinitionWriter.cs @@ -0,0 +1,2094 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class AnalysisCaseDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public AnalysisCaseDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IAnalysisCaseDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:AnalysisCaseDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.objectiveRequirement != null && poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("objectiveRequirement", poco.objectiveRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.resultExpression != null && poco.resultExpression.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("resultExpression", poco.resultExpression.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("subjectParameter", poco.subjectParameter.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.action != null) + { + foreach (var item in poco.action) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "action", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.calculation != null) + { + foreach (var item in poco.calculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "calculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.objectiveRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.objectiveRequirement, "objectiveRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.resultExpression != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.resultExpression.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.resultExpression, "resultExpression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IAnalysisCaseDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:AnalysisCaseDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.objectiveRequirement != null && poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "objectiveRequirement", null, poco.objectiveRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.resultExpression != null && poco.resultExpression.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "resultExpression", null, poco.resultExpression.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "subjectParameter", null, poco.subjectParameter.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.action != null) + { + foreach (var item in poco.action) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "action", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.calculation != null) + { + foreach (var item in poco.calculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "calculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.objectiveRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.objectiveRequirement, "objectiveRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.resultExpression != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.resultExpression.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.resultExpression, "resultExpression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AnalysisCaseUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AnalysisCaseUsageWriter.cs new file mode 100644 index 000000000..bdd2a4fca --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AnalysisCaseUsageWriter.cs @@ -0,0 +1,2697 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class AnalysisCaseUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public AnalysisCaseUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IAnalysisCaseUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:AnalysisCaseUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.analysisCaseDefinition != null && poco.analysisCaseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("analysisCaseDefinition", poco.analysisCaseDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.objectiveRequirement != null && poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("objectiveRequirement", poco.objectiveRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.resultExpression != null && poco.resultExpression.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("resultExpression", poco.resultExpression.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("subjectParameter", poco.subjectParameter.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.analysisCaseDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.analysisCaseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.analysisCaseDefinition, "analysisCaseDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.objectiveRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.objectiveRequirement, "objectiveRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.resultExpression != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.resultExpression.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.resultExpression, "resultExpression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IAnalysisCaseUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:AnalysisCaseUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.analysisCaseDefinition != null && poco.analysisCaseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "analysisCaseDefinition", null, poco.analysisCaseDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.objectiveRequirement != null && poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "objectiveRequirement", null, poco.objectiveRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.resultExpression != null && poco.resultExpression.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "resultExpression", null, poco.resultExpression.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "subjectParameter", null, poco.subjectParameter.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.analysisCaseDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.analysisCaseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.analysisCaseDefinition, "analysisCaseDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.objectiveRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.objectiveRequirement, "objectiveRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.resultExpression != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.resultExpression.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.resultExpression, "resultExpression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AnnotatingElementWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AnnotatingElementWriter.cs new file mode 100644 index 000000000..19db5c1b7 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AnnotatingElementWriter.cs @@ -0,0 +1,475 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class AnnotatingElementWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public AnnotatingElementWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IAnnotatingElement poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:AnnotatingElement"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotatedElement != null) + { + foreach (var item in poco.annotatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "annotatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotation != null) + { + foreach (var item in poco.annotation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "annotation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotatingRelationship != null) + { + foreach (var item in poco.ownedAnnotatingRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotatingRelationship", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IAnnotatingElement poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:AnnotatingElement"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotatedElement != null) + { + foreach (var item in poco.annotatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "annotatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotation != null) + { + foreach (var item in poco.annotation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "annotation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotatingRelationship != null) + { + foreach (var item in poco.ownedAnnotatingRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotatingRelationship", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AnnotationWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AnnotationWriter.cs new file mode 100644 index 000000000..c42a6d450 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AnnotationWriter.cs @@ -0,0 +1,553 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class AnnotationWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public AnnotationWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IAnnotation poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Annotation"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.AnnotatedElement != null && poco.AnnotatedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("annotatedElement", poco.AnnotatedElement.Id.ToString()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.annotatingElement != null && poco.annotatingElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("annotatingElement", poco.annotatingElement.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedAnnotatingElement != null && poco.ownedAnnotatingElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedAnnotatingElement", poco.ownedAnnotatingElement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (poco.AnnotatedElement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.AnnotatedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.AnnotatedElement, "annotatedElement", elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotatingElement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.annotatingElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.annotatingElement, "annotatingElement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotatingElement != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedAnnotatingElement, "ownedAnnotatingElement", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IAnnotation poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Annotation"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.AnnotatedElement != null && poco.AnnotatedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "annotatedElement", null, poco.AnnotatedElement.Id.ToString()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.annotatingElement != null && poco.annotatingElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "annotatingElement", null, poco.annotatingElement.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedAnnotatingElement != null && poco.ownedAnnotatingElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedAnnotatingElement", null, poco.ownedAnnotatingElement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (poco.AnnotatedElement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.AnnotatedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.AnnotatedElement, "annotatedElement", elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotatingElement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.annotatingElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.annotatingElement, "annotatingElement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotatingElement != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedAnnotatingElement, "ownedAnnotatingElement", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AssertConstraintUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AssertConstraintUsageWriter.cs new file mode 100644 index 000000000..4fa5747bc --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AssertConstraintUsageWriter.cs @@ -0,0 +1,2587 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class AssertConstraintUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public AssertConstraintUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IAssertConstraintUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:AssertConstraintUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.assertedConstraint != null && poco.assertedConstraint.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("assertedConstraint", poco.assertedConstraint.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.constraintDefinition != null && poco.constraintDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("constraintDefinition", poco.constraintDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsNegated) + { + xmlWriter.WriteAttributeString("isNegated", "true"); + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.assertedConstraint != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.assertedConstraint.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.assertedConstraint, "assertedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.constraintDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.constraintDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.constraintDefinition, "constraintDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IAssertConstraintUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:AssertConstraintUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.assertedConstraint != null && poco.assertedConstraint.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "assertedConstraint", null, poco.assertedConstraint.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.constraintDefinition != null && poco.constraintDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "constraintDefinition", null, poco.constraintDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsNegated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isNegated", null, "true"); + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.assertedConstraint != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.assertedConstraint.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.assertedConstraint, "assertedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.constraintDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.constraintDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.constraintDefinition, "constraintDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AssignmentActionUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AssignmentActionUsageWriter.cs new file mode 100644 index 000000000..0ea59a98e --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AssignmentActionUsageWriter.cs @@ -0,0 +1,2583 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class AssignmentActionUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public AssignmentActionUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IAssignmentActionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:AssignmentActionUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.referent != null && poco.referent.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("referent", poco.referent.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.targetArgument != null && poco.targetArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("targetArgument", poco.targetArgument.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.valueExpression != null && poco.valueExpression.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("valueExpression", poco.valueExpression.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.referent != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.referent.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.referent, "referent", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.targetArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.targetArgument, "targetArgument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.valueExpression != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.valueExpression.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.valueExpression, "valueExpression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IAssignmentActionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:AssignmentActionUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.referent != null && poco.referent.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "referent", null, poco.referent.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.targetArgument != null && poco.targetArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "targetArgument", null, poco.targetArgument.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.valueExpression != null && poco.valueExpression.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "valueExpression", null, poco.valueExpression.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.referent != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.referent.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.referent, "referent", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.targetArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.targetArgument, "targetArgument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.valueExpression != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.valueExpression.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.valueExpression, "valueExpression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AssociationStructureWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AssociationStructureWriter.cs new file mode 100644 index 000000000..d444056fa --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AssociationStructureWriter.cs @@ -0,0 +1,1200 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Structures; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Associations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class AssociationStructureWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public AssociationStructureWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IAssociationStructure poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:AssociationStructure"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceType != null && poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceType", poco.sourceType.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.associationEnd != null) + { + foreach (var item in poco.associationEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "associationEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedType != null) + { + foreach (var item in poco.relatedType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceType, "sourceType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetType != null) + { + foreach (var item in poco.targetType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "targetType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IAssociationStructure poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:AssociationStructure"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceType != null && poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceType", null, poco.sourceType.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.associationEnd != null) + { + foreach (var item in poco.associationEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "associationEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedType != null) + { + foreach (var item in poco.relatedType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceType, "sourceType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetType != null) + { + foreach (var item in poco.targetType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "targetType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AssociationWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AssociationWriter.cs new file mode 100644 index 000000000..199c92563 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AssociationWriter.cs @@ -0,0 +1,1199 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Associations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class AssociationWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public AssociationWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IAssociation poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Association"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceType != null && poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceType", poco.sourceType.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.associationEnd != null) + { + foreach (var item in poco.associationEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "associationEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedType != null) + { + foreach (var item in poco.relatedType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceType, "sourceType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetType != null) + { + foreach (var item in poco.targetType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "targetType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IAssociation poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Association"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceType != null && poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceType", null, poco.sourceType.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.associationEnd != null) + { + foreach (var item in poco.associationEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "associationEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedType != null) + { + foreach (var item in poco.relatedType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceType, "sourceType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetType != null) + { + foreach (var item in poco.targetType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "targetType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AttributeDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AttributeDefinitionWriter.cs new file mode 100644 index 000000000..6912cb629 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AttributeDefinitionWriter.cs @@ -0,0 +1,1805 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.DataTypes; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class AttributeDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public AttributeDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IAttributeDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:AttributeDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IAttributeDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:AttributeDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AttributeUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AttributeUsageWriter.cs new file mode 100644 index 000000000..8984c57da --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/AttributeUsageWriter.cs @@ -0,0 +1,2386 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.DataTypes; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class AttributeUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public AttributeUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IAttributeUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:AttributeUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "false"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.attributeDefinition != null) + { + foreach (var item in poco.attributeDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "attributeDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IAttributeUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:AttributeUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "false"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.attributeDefinition != null) + { + foreach (var item in poco.attributeDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "attributeDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/BehaviorWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/BehaviorWriter.cs new file mode 100644 index 000000000..85b7b4791 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/BehaviorWriter.cs @@ -0,0 +1,1114 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class BehaviorWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public BehaviorWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IBehavior poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Behavior"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IBehavior poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Behavior"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/BindingConnectorAsUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/BindingConnectorAsUsageWriter.cs new file mode 100644 index 000000000..5d8c80995 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/BindingConnectorAsUsageWriter.cs @@ -0,0 +1,2555 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Associations; + using SysML2.NET.Core.POCO.Kernel.Connectors; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class BindingConnectorAsUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public BindingConnectorAsUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IBindingConnectorAsUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:BindingConnectorAsUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("defaultFeaturingType", poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceFeature", poco.sourceFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.association != null) + { + foreach (var item in poco.association) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "association", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.definition != null) + { + foreach (var item in poco.definition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "definition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IBindingConnectorAsUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:BindingConnectorAsUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "defaultFeaturingType", null, poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceFeature", null, poco.sourceFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.association != null) + { + foreach (var item in poco.association) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "association", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.definition != null) + { + foreach (var item in poco.definition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "definition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/BindingConnectorWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/BindingConnectorWriter.cs new file mode 100644 index 000000000..acf605745 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/BindingConnectorWriter.cs @@ -0,0 +1,1720 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Associations; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Connectors; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class BindingConnectorWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public BindingConnectorWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IBindingConnector poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:BindingConnector"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("defaultFeaturingType", poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceFeature", poco.sourceFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.association != null) + { + foreach (var item in poco.association) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "association", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IBindingConnector poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:BindingConnector"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "defaultFeaturingType", null, poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceFeature", null, poco.sourceFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.association != null) + { + foreach (var item in poco.association) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "association", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/BooleanExpressionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/BooleanExpressionWriter.cs new file mode 100644 index 000000000..f17cf69cf --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/BooleanExpressionWriter.cs @@ -0,0 +1,1666 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class BooleanExpressionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public BooleanExpressionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IBooleanExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:BooleanExpression"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.predicate != null && poco.predicate.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("predicate", poco.predicate.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.predicate != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.predicate.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.predicate, "predicate", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IBooleanExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:BooleanExpression"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.predicate != null && poco.predicate.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "predicate", null, poco.predicate.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.predicate != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.predicate.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.predicate, "predicate", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/CalculationDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/CalculationDefinitionWriter.cs new file mode 100644 index 000000000..0b739c5d7 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/CalculationDefinitionWriter.cs @@ -0,0 +1,1958 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class CalculationDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public CalculationDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ICalculationDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:CalculationDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.action != null) + { + foreach (var item in poco.action) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "action", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.calculation != null) + { + foreach (var item in poco.calculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "calculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ICalculationDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:CalculationDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.action != null) + { + foreach (var item in poco.action) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "action", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.calculation != null) + { + foreach (var item in poco.calculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "calculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/CalculationUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/CalculationUsageWriter.cs new file mode 100644 index 000000000..39111e63c --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/CalculationUsageWriter.cs @@ -0,0 +1,2561 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class CalculationUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public CalculationUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ICalculationUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:CalculationUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.calculationDefinition != null && poco.calculationDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("calculationDefinition", poco.calculationDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.calculationDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.calculationDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.calculationDefinition, "calculationDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ICalculationUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:CalculationUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.calculationDefinition != null && poco.calculationDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "calculationDefinition", null, poco.calculationDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.calculationDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.calculationDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.calculationDefinition, "calculationDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/CaseDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/CaseDefinitionWriter.cs new file mode 100644 index 000000000..47678d638 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/CaseDefinitionWriter.cs @@ -0,0 +1,2056 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class CaseDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public CaseDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ICaseDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:CaseDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.objectiveRequirement != null && poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("objectiveRequirement", poco.objectiveRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("subjectParameter", poco.subjectParameter.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.action != null) + { + foreach (var item in poco.action) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "action", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.calculation != null) + { + foreach (var item in poco.calculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "calculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.objectiveRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.objectiveRequirement, "objectiveRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ICaseDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:CaseDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.objectiveRequirement != null && poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "objectiveRequirement", null, poco.objectiveRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "subjectParameter", null, poco.subjectParameter.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.action != null) + { + foreach (var item in poco.action) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "action", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.calculation != null) + { + foreach (var item in poco.calculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "calculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.objectiveRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.objectiveRequirement, "objectiveRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/CaseUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/CaseUsageWriter.cs new file mode 100644 index 000000000..e0f529925 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/CaseUsageWriter.cs @@ -0,0 +1,2659 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class CaseUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public CaseUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ICaseUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:CaseUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.caseDefinition != null && poco.caseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("caseDefinition", poco.caseDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.objectiveRequirement != null && poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("objectiveRequirement", poco.objectiveRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("subjectParameter", poco.subjectParameter.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.caseDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.caseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.caseDefinition, "caseDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.objectiveRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.objectiveRequirement, "objectiveRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ICaseUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:CaseUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.caseDefinition != null && poco.caseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "caseDefinition", null, poco.caseDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.objectiveRequirement != null && poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "objectiveRequirement", null, poco.objectiveRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "subjectParameter", null, poco.subjectParameter.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.caseDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.caseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.caseDefinition, "caseDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.objectiveRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.objectiveRequirement, "objectiveRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ClassWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ClassWriter.cs new file mode 100644 index 000000000..a30436fb1 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ClassWriter.cs @@ -0,0 +1,1091 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ClassWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ClassWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IClass poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Class"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IClass poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Class"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ClassifierWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ClassifierWriter.cs new file mode 100644 index 000000000..4c7f739f1 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ClassifierWriter.cs @@ -0,0 +1,1090 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ClassifierWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ClassifierWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IClassifier poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Classifier"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IClassifier poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Classifier"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/CollectExpressionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/CollectExpressionWriter.cs new file mode 100644 index 000000000..fa51abcee --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/CollectExpressionWriter.cs @@ -0,0 +1,1743 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Expressions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class CollectExpressionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public CollectExpressionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ICollectExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:CollectExpression"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("function", poco.function.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.instantiatedType != null && poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("instantiatedType", poco.instantiatedType.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (poco.Operator != "collect") + { + if (!string.IsNullOrWhiteSpace(poco.Operator)) + { + xmlWriter.WriteAttributeString("operator", poco.Operator); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.argument != null) + { + foreach (var item in poco.argument) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "argument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.instantiatedType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.instantiatedType, "instantiatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ICollectExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:CollectExpression"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "function", null, poco.function.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.instantiatedType != null && poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "instantiatedType", null, poco.instantiatedType.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (poco.Operator != "collect") + { + if (!string.IsNullOrWhiteSpace(poco.Operator)) + { + await xmlWriter.WriteAttributeStringAsync(null, "operator", null, poco.Operator); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.argument != null) + { + foreach (var item in poco.argument) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "argument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.instantiatedType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.instantiatedType, "instantiatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/CommentWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/CommentWriter.cs new file mode 100644 index 000000000..0dd0c7f9b --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/CommentWriter.cs @@ -0,0 +1,495 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class CommentWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public CommentWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IComment poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Comment"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.Body)) + { + xmlWriter.WriteAttributeString("body", poco.Body); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (!string.IsNullOrWhiteSpace(poco.Locale)) + { + xmlWriter.WriteAttributeString("locale", poco.Locale); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotatedElement != null) + { + foreach (var item in poco.annotatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "annotatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotation != null) + { + foreach (var item in poco.annotation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "annotation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotatingRelationship != null) + { + foreach (var item in poco.ownedAnnotatingRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotatingRelationship", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IComment poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Comment"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.Body)) + { + await xmlWriter.WriteAttributeStringAsync(null, "body", null, poco.Body); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (!string.IsNullOrWhiteSpace(poco.Locale)) + { + await xmlWriter.WriteAttributeStringAsync(null, "locale", null, poco.Locale); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotatedElement != null) + { + foreach (var item in poco.annotatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "annotatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotation != null) + { + foreach (var item in poco.annotation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "annotation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotatingRelationship != null) + { + foreach (var item in poco.ownedAnnotatingRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotatingRelationship", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConcernDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConcernDefinitionWriter.cs new file mode 100644 index 000000000..6d2f0371e --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConcernDefinitionWriter.cs @@ -0,0 +1,2078 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ConcernDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ConcernDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IConcernDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ConcernDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ReqId)) + { + xmlWriter.WriteAttributeString("reqId", poco.ReqId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("subjectParameter", poco.subjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.text != null && poco.text.Count > 0) + { + xmlWriter.WriteAttributeString("text", string.Join(" ", poco.text)); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.assumedConstraint != null) + { + foreach (var item in poco.assumedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "assumedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.framedConcern != null) + { + foreach (var item in poco.framedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "framedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.requiredConstraint != null) + { + foreach (var item in poco.requiredConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "requiredConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.stakeholderParameter != null) + { + foreach (var item in poco.stakeholderParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "stakeholderParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IConcernDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ConcernDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ReqId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "reqId", null, poco.ReqId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "subjectParameter", null, poco.subjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.text != null && poco.text.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "text", null, string.Join(" ", poco.text)); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.assumedConstraint != null) + { + foreach (var item in poco.assumedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "assumedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.framedConcern != null) + { + foreach (var item in poco.framedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "framedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.requiredConstraint != null) + { + foreach (var item in poco.requiredConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "requiredConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.stakeholderParameter != null) + { + foreach (var item in poco.stakeholderParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "stakeholderParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConcernUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConcernUsageWriter.cs new file mode 100644 index 000000000..5e6c2bf72 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConcernUsageWriter.cs @@ -0,0 +1,2703 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ConcernUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ConcernUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IConcernUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ConcernUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.concernDefinition != null && poco.concernDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("concernDefinition", poco.concernDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ReqId)) + { + xmlWriter.WriteAttributeString("reqId", poco.ReqId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("subjectParameter", poco.subjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.text != null && poco.text.Count > 0) + { + xmlWriter.WriteAttributeString("text", string.Join(" ", poco.text)); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.assumedConstraint != null) + { + foreach (var item in poco.assumedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "assumedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.concernDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.concernDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.concernDefinition, "concernDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.framedConcern != null) + { + foreach (var item in poco.framedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "framedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.requiredConstraint != null) + { + foreach (var item in poco.requiredConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "requiredConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.stakeholderParameter != null) + { + foreach (var item in poco.stakeholderParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "stakeholderParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IConcernUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ConcernUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.concernDefinition != null && poco.concernDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "concernDefinition", null, poco.concernDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ReqId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "reqId", null, poco.ReqId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "subjectParameter", null, poco.subjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.text != null && poco.text.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "text", null, string.Join(" ", poco.text)); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.assumedConstraint != null) + { + foreach (var item in poco.assumedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "assumedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.concernDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.concernDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.concernDefinition, "concernDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.framedConcern != null) + { + foreach (var item in poco.framedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "framedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.requiredConstraint != null) + { + foreach (var item in poco.requiredConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "requiredConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.stakeholderParameter != null) + { + foreach (var item in poco.stakeholderParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "stakeholderParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConjugatedPortDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConjugatedPortDefinitionWriter.cs new file mode 100644 index 000000000..418f9580a --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConjugatedPortDefinitionWriter.cs @@ -0,0 +1,1858 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ConjugatedPortDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ConjugatedPortDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IConjugatedPortDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ConjugatedPortDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.conjugatedPortDefinition != null && poco.conjugatedPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("conjugatedPortDefinition", poco.conjugatedPortDefinition.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.originalPortDefinition != null && poco.originalPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("originalPortDefinition", poco.originalPortDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedPortConjugator != null && poco.ownedPortConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedPortConjugator", poco.ownedPortConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.conjugatedPortDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.conjugatedPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.conjugatedPortDefinition, "conjugatedPortDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.originalPortDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.originalPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.originalPortDefinition, "originalPortDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPortConjugator != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ownedPortConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.ownedPortConjugator, "ownedPortConjugator", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IConjugatedPortDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ConjugatedPortDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.conjugatedPortDefinition != null && poco.conjugatedPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "conjugatedPortDefinition", null, poco.conjugatedPortDefinition.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.originalPortDefinition != null && poco.originalPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "originalPortDefinition", null, poco.originalPortDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedPortConjugator != null && poco.ownedPortConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedPortConjugator", null, poco.ownedPortConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.conjugatedPortDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.conjugatedPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.conjugatedPortDefinition, "conjugatedPortDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.originalPortDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.originalPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.originalPortDefinition, "originalPortDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPortConjugator != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ownedPortConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.ownedPortConjugator, "ownedPortConjugator", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConjugatedPortTypingWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConjugatedPortTypingWriter.cs new file mode 100644 index 000000000..96ae1b678 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConjugatedPortTypingWriter.cs @@ -0,0 +1,550 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ConjugatedPortTypingWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ConjugatedPortTypingWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IConjugatedPortTyping poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ConjugatedPortTyping"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.ConjugatedPortDefinition != null && poco.ConjugatedPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("conjugatedPortDefinition", poco.ConjugatedPortDefinition.Id.ToString()); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.portDefinition != null && poco.portDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("portDefinition", poco.portDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.TypedFeature != null && poco.TypedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("typedFeature", poco.TypedFeature.Id.ToString()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (poco.ConjugatedPortDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ConjugatedPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.ConjugatedPortDefinition, "conjugatedPortDefinition", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.portDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.portDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.portDefinition, "portDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.TypedFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.TypedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.TypedFeature, "typedFeature", elementOriginMap, currentFileUri); + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IConjugatedPortTyping poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ConjugatedPortTyping"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.ConjugatedPortDefinition != null && poco.ConjugatedPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "conjugatedPortDefinition", null, poco.ConjugatedPortDefinition.Id.ToString()); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.portDefinition != null && poco.portDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "portDefinition", null, poco.portDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.TypedFeature != null && poco.TypedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "typedFeature", null, poco.TypedFeature.Id.ToString()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (poco.ConjugatedPortDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ConjugatedPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.ConjugatedPortDefinition, "conjugatedPortDefinition", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.portDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.portDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.portDefinition, "portDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.TypedFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.TypedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.TypedFeature, "typedFeature", elementOriginMap, currentFileUri); + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConjugationWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConjugationWriter.cs new file mode 100644 index 000000000..493b0ac3c --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConjugationWriter.cs @@ -0,0 +1,510 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ConjugationWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ConjugationWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IConjugation poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Conjugation"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.ConjugatedType != null && poco.ConjugatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("conjugatedType", poco.ConjugatedType.Id.ToString()); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.OriginalType != null && poco.OriginalType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("originalType", poco.OriginalType.Id.ToString()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (poco.ConjugatedType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ConjugatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.ConjugatedType, "conjugatedType", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OriginalType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.OriginalType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.OriginalType, "originalType", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IConjugation poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Conjugation"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.ConjugatedType != null && poco.ConjugatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "conjugatedType", null, poco.ConjugatedType.Id.ToString()); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.OriginalType != null && poco.OriginalType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "originalType", null, poco.OriginalType.Id.ToString()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (poco.ConjugatedType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ConjugatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.ConjugatedType, "conjugatedType", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OriginalType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.OriginalType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.OriginalType, "originalType", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConnectionDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConnectionDefinitionWriter.cs new file mode 100644 index 000000000..c9ff4c792 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConnectionDefinitionWriter.cs @@ -0,0 +1,1923 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Associations; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ConnectionDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ConnectionDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IConnectionDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ConnectionDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (!poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceType != null && poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceType", poco.sourceType.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectionEnd != null) + { + foreach (var item in poco.connectionEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "connectionEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedType != null) + { + foreach (var item in poco.relatedType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceType, "sourceType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetType != null) + { + foreach (var item in poco.targetType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "targetType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IConnectionDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ConnectionDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (!poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceType != null && poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceType", null, poco.sourceType.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectionEnd != null) + { + foreach (var item in poco.connectionEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "connectionEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedType != null) + { + foreach (var item in poco.relatedType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceType, "sourceType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetType != null) + { + foreach (var item in poco.targetType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "targetType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConnectionUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConnectionUsageWriter.cs new file mode 100644 index 000000000..934ee87dc --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConnectionUsageWriter.cs @@ -0,0 +1,2660 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Associations; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Connectors; + using SysML2.NET.Core.POCO.Kernel.Structures; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ConnectionUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ConnectionUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IConnectionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ConnectionUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("defaultFeaturingType", poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceFeature", poco.sourceFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectionDefinition != null) + { + foreach (var item in poco.connectionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "connectionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.itemDefinition != null) + { + foreach (var item in poco.itemDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "itemDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.partDefinition != null) + { + foreach (var item in poco.partDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "partDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IConnectionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ConnectionUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "defaultFeaturingType", null, poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceFeature", null, poco.sourceFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectionDefinition != null) + { + foreach (var item in poco.connectionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "connectionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.itemDefinition != null) + { + foreach (var item in poco.itemDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "itemDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.partDefinition != null) + { + foreach (var item in poco.partDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "partDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConnectorWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConnectorWriter.cs new file mode 100644 index 000000000..ac0d7fa21 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConnectorWriter.cs @@ -0,0 +1,1720 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Associations; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Connectors; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ConnectorWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ConnectorWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IConnector poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Connector"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("defaultFeaturingType", poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceFeature", poco.sourceFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.association != null) + { + foreach (var item in poco.association) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "association", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IConnector poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Connector"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "defaultFeaturingType", null, poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceFeature", null, poco.sourceFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.association != null) + { + foreach (var item in poco.association) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "association", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConstraintDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConstraintDefinitionWriter.cs new file mode 100644 index 000000000..ef46223a7 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConstraintDefinitionWriter.cs @@ -0,0 +1,1914 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ConstraintDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ConstraintDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IConstraintDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ConstraintDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IConstraintDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ConstraintDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConstraintUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConstraintUsageWriter.cs new file mode 100644 index 000000000..1ee39d713 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConstraintUsageWriter.cs @@ -0,0 +1,2539 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ConstraintUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ConstraintUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IConstraintUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ConstraintUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.constraintDefinition != null && poco.constraintDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("constraintDefinition", poco.constraintDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.constraintDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.constraintDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.constraintDefinition, "constraintDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IConstraintUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ConstraintUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.constraintDefinition != null && poco.constraintDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "constraintDefinition", null, poco.constraintDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.constraintDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.constraintDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.constraintDefinition, "constraintDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConstructorExpressionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConstructorExpressionWriter.cs new file mode 100644 index 000000000..4a62d4812 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ConstructorExpressionWriter.cs @@ -0,0 +1,1727 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Expressions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ConstructorExpressionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ConstructorExpressionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IConstructorExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ConstructorExpression"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("function", poco.function.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.instantiatedType != null && poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("instantiatedType", poco.instantiatedType.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.argument != null) + { + foreach (var item in poco.argument) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "argument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.instantiatedType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.instantiatedType, "instantiatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IConstructorExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ConstructorExpression"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "function", null, poco.function.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.instantiatedType != null && poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "instantiatedType", null, poco.instantiatedType.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.argument != null) + { + foreach (var item in poco.argument) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "argument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.instantiatedType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.instantiatedType, "instantiatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/CrossSubsettingWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/CrossSubsettingWriter.cs new file mode 100644 index 000000000..a6bc60dd7 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/CrossSubsettingWriter.cs @@ -0,0 +1,485 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class CrossSubsettingWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public CrossSubsettingWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ICrossSubsetting poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:CrossSubsetting"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.CrossedFeature != null && poco.CrossedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossedFeature", poco.CrossedFeature.Id.ToString()); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (poco.CrossedFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.CrossedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.CrossedFeature, "crossedFeature", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ICrossSubsetting poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:CrossSubsetting"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.CrossedFeature != null && poco.CrossedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossedFeature", null, poco.CrossedFeature.Id.ToString()); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (poco.CrossedFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.CrossedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.CrossedFeature, "crossedFeature", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/DataTypeWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/DataTypeWriter.cs new file mode 100644 index 000000000..1685831ad --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/DataTypeWriter.cs @@ -0,0 +1,1091 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.DataTypes; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class DataTypeWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public DataTypeWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IDataType poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:DataType"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IDataType poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:DataType"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/DecisionNodeWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/DecisionNodeWriter.cs new file mode 100644 index 000000000..ea35f4609 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/DecisionNodeWriter.cs @@ -0,0 +1,2468 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class DecisionNodeWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public DecisionNodeWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IDecisionNode poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:DecisionNode"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IDecisionNode poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:DecisionNode"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/DefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/DefinitionWriter.cs new file mode 100644 index 000000000..dac3a8cf1 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/DefinitionWriter.cs @@ -0,0 +1,1804 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class DefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public DefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Definition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Definition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/DependencyWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/DependencyWriter.cs new file mode 100644 index 000000000..9697927d5 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/DependencyWriter.cs @@ -0,0 +1,490 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Root.Dependencies; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class DependencyWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public DependencyWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IDependency poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Dependency"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (poco.Client != null) + { + foreach (var item in poco.Client) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "client", elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.Supplier != null) + { + foreach (var item in poco.Supplier) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "supplier", elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IDependency poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Dependency"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (poco.Client != null) + { + foreach (var item in poco.Client) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "client", elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.Supplier != null) + { + foreach (var item in poco.Supplier) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "supplier", elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/DifferencingWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/DifferencingWriter.cs new file mode 100644 index 000000000..5b6aa50a3 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/DifferencingWriter.cs @@ -0,0 +1,484 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class DifferencingWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public DifferencingWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IDifferencing poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Differencing"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.DifferencingType != null && poco.DifferencingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("differencingType", poco.DifferencingType.Id.ToString()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (poco.DifferencingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.DifferencingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.DifferencingType, "differencingType", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IDifferencing poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Differencing"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.DifferencingType != null && poco.DifferencingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "differencingType", null, poco.DifferencingType.Id.ToString()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (poco.DifferencingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.DifferencingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.DifferencingType, "differencingType", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/DisjoiningWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/DisjoiningWriter.cs new file mode 100644 index 000000000..2e9879780 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/DisjoiningWriter.cs @@ -0,0 +1,510 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class DisjoiningWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public DisjoiningWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IDisjoining poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Disjoining"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.DisjoiningType != null && poco.DisjoiningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("disjoiningType", poco.DisjoiningType.Id.ToString()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.TypeDisjoined != null && poco.TypeDisjoined.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("typeDisjoined", poco.TypeDisjoined.Id.ToString()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (poco.DisjoiningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.DisjoiningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.DisjoiningType, "disjoiningType", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.TypeDisjoined != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.TypeDisjoined.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.TypeDisjoined, "typeDisjoined", elementOriginMap, currentFileUri); + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IDisjoining poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Disjoining"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.DisjoiningType != null && poco.DisjoiningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "disjoiningType", null, poco.DisjoiningType.Id.ToString()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.TypeDisjoined != null && poco.TypeDisjoined.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "typeDisjoined", null, poco.TypeDisjoined.Id.ToString()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (poco.DisjoiningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.DisjoiningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.DisjoiningType, "disjoiningType", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.TypeDisjoined != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.TypeDisjoined.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.TypeDisjoined, "typeDisjoined", elementOriginMap, currentFileUri); + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/DocumentationWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/DocumentationWriter.cs new file mode 100644 index 000000000..a4fa14655 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/DocumentationWriter.cs @@ -0,0 +1,511 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class DocumentationWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public DocumentationWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IDocumentation poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Documentation"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.Body)) + { + xmlWriter.WriteAttributeString("body", poco.Body); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.documentedElement != null && poco.documentedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("documentedElement", poco.documentedElement.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (!string.IsNullOrWhiteSpace(poco.Locale)) + { + xmlWriter.WriteAttributeString("locale", poco.Locale); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotation != null) + { + foreach (var item in poco.annotation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "annotation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentedElement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.documentedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.documentedElement, "documentedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotatingRelationship != null) + { + foreach (var item in poco.ownedAnnotatingRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotatingRelationship", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IDocumentation poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Documentation"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.Body)) + { + await xmlWriter.WriteAttributeStringAsync(null, "body", null, poco.Body); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.documentedElement != null && poco.documentedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "documentedElement", null, poco.documentedElement.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (!string.IsNullOrWhiteSpace(poco.Locale)) + { + await xmlWriter.WriteAttributeStringAsync(null, "locale", null, poco.Locale); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotation != null) + { + foreach (var item in poco.annotation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "annotation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentedElement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.documentedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.documentedElement, "documentedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotatingRelationship != null) + { + foreach (var item in poco.ownedAnnotatingRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotatingRelationship", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ElementFilterMembershipWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ElementFilterMembershipWriter.cs new file mode 100644 index 000000000..c290127ab --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ElementFilterMembershipWriter.cs @@ -0,0 +1,550 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Packages; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ElementFilterMembershipWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ElementFilterMembershipWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IElementFilterMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ElementFilterMembership"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.condition != null && poco.condition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("condition", poco.condition.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + xmlWriter.WriteAttributeString("ownedMemberElementId", poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + xmlWriter.WriteAttributeString("ownedMemberName", poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + xmlWriter.WriteAttributeString("ownedMemberShortName", poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.condition != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.condition, "condition", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IElementFilterMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ElementFilterMembership"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.condition != null && poco.condition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "condition", null, poco.condition.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberElementId", null, poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberName", null, poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberShortName", null, poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.condition != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.condition, "condition", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/EndFeatureMembershipWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/EndFeatureMembershipWriter.cs new file mode 100644 index 000000000..15ac12f49 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/EndFeatureMembershipWriter.cs @@ -0,0 +1,550 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class EndFeatureMembershipWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public EndFeatureMembershipWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IEndFeatureMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:EndFeatureMembership"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + xmlWriter.WriteAttributeString("ownedMemberElementId", poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedMemberFeature != null && poco.ownedMemberFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedMemberFeature", poco.ownedMemberFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + xmlWriter.WriteAttributeString("ownedMemberName", poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + xmlWriter.WriteAttributeString("ownedMemberShortName", poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMemberFeature != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedMemberFeature, "ownedMemberFeature", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IEndFeatureMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:EndFeatureMembership"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberElementId", null, poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedMemberFeature != null && poco.ownedMemberFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberFeature", null, poco.ownedMemberFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberName", null, poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberShortName", null, poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMemberFeature != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedMemberFeature, "ownedMemberFeature", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/EnumerationDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/EnumerationDefinitionWriter.cs new file mode 100644 index 000000000..d6b743634 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/EnumerationDefinitionWriter.cs @@ -0,0 +1,1804 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class EnumerationDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public EnumerationDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IEnumerationDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:EnumerationDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "false"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.enumeratedValue != null) + { + foreach (var item in poco.enumeratedValue) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "enumeratedValue", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IEnumerationDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:EnumerationDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "false"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.enumeratedValue != null) + { + foreach (var item in poco.enumeratedValue) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "enumeratedValue", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/EnumerationUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/EnumerationUsageWriter.cs new file mode 100644 index 000000000..24a414510 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/EnumerationUsageWriter.cs @@ -0,0 +1,2402 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.DataTypes; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class EnumerationUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public EnumerationUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IEnumerationUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:EnumerationUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.enumerationDefinition != null && poco.enumerationDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("enumerationDefinition", poco.enumerationDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "false"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.enumerationDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.enumerationDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.enumerationDefinition, "enumerationDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IEnumerationUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:EnumerationUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.enumerationDefinition != null && poco.enumerationDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "enumerationDefinition", null, poco.enumerationDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "false"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.enumerationDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.enumerationDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.enumerationDefinition, "enumerationDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/EventOccurrenceUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/EventOccurrenceUsageWriter.cs new file mode 100644 index 000000000..09bfe12ea --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/EventOccurrenceUsageWriter.cs @@ -0,0 +1,2483 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class EventOccurrenceUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public EventOccurrenceUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IEventOccurrenceUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:EventOccurrenceUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.eventOccurrence != null && poco.eventOccurrence.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("eventOccurrence", poco.eventOccurrence.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "false"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.eventOccurrence != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.eventOccurrence.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.eventOccurrence, "eventOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IEventOccurrenceUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:EventOccurrenceUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.eventOccurrence != null && poco.eventOccurrence.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "eventOccurrence", null, poco.eventOccurrence.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "false"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.eventOccurrence != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.eventOccurrence.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.eventOccurrence, "eventOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ExhibitStateUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ExhibitStateUsageWriter.cs new file mode 100644 index 000000000..4cb1c0547 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ExhibitStateUsageWriter.cs @@ -0,0 +1,2630 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ExhibitStateUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ExhibitStateUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IExhibitStateUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ExhibitStateUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.doAction != null && poco.doAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("doAction", poco.doAction.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.entryAction != null && poco.entryAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("entryAction", poco.entryAction.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.exhibitedState != null && poco.exhibitedState.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("exhibitedState", poco.exhibitedState.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.exitAction != null && poco.exitAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("exitAction", poco.exitAction.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsParallel) + { + xmlWriter.WriteAttributeString("isParallel", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "false"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.doAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.doAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.doAction, "doAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.entryAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.entryAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.entryAction, "entryAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.exhibitedState != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.exhibitedState.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.exhibitedState, "exhibitedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.exitAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.exitAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.exitAction, "exitAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.stateDefinition != null) + { + foreach (var item in poco.stateDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "stateDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IExhibitStateUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ExhibitStateUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.doAction != null && poco.doAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "doAction", null, poco.doAction.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.entryAction != null && poco.entryAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "entryAction", null, poco.entryAction.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.exhibitedState != null && poco.exhibitedState.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "exhibitedState", null, poco.exhibitedState.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.exitAction != null && poco.exitAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "exitAction", null, poco.exitAction.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsParallel) + { + await xmlWriter.WriteAttributeStringAsync(null, "isParallel", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "false"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.doAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.doAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.doAction, "doAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.entryAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.entryAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.entryAction, "entryAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.exhibitedState != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.exhibitedState.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.exhibitedState, "exhibitedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.exitAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.exitAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.exitAction, "exitAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.stateDefinition != null) + { + foreach (var item in poco.stateDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "stateDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ExpressionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ExpressionWriter.cs new file mode 100644 index 000000000..82ed3aa55 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ExpressionWriter.cs @@ -0,0 +1,1666 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ExpressionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ExpressionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Expression"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("function", poco.function.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Expression"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "function", null, poco.function.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureChainExpressionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureChainExpressionWriter.cs new file mode 100644 index 000000000..551369a20 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureChainExpressionWriter.cs @@ -0,0 +1,1781 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Expressions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class FeatureChainExpressionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public FeatureChainExpressionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IFeatureChainExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:FeatureChainExpression"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("function", poco.function.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.instantiatedType != null && poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("instantiatedType", poco.instantiatedType.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (poco.Operator != ".") + { + if (!string.IsNullOrWhiteSpace(poco.Operator)) + { + xmlWriter.WriteAttributeString("operator", poco.Operator); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.targetFeature != null && poco.targetFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("targetFeature", poco.targetFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.argument != null) + { + foreach (var item in poco.argument) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "argument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.instantiatedType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.instantiatedType, "instantiatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.targetFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.targetFeature, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IFeatureChainExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:FeatureChainExpression"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "function", null, poco.function.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.instantiatedType != null && poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "instantiatedType", null, poco.instantiatedType.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (poco.Operator != ".") + { + if (!string.IsNullOrWhiteSpace(poco.Operator)) + { + await xmlWriter.WriteAttributeStringAsync(null, "operator", null, poco.Operator); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.targetFeature != null && poco.targetFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "targetFeature", null, poco.targetFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.argument != null) + { + foreach (var item in poco.argument) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "argument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.instantiatedType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.instantiatedType, "instantiatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.targetFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.targetFeature, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureChainingWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureChainingWriter.cs new file mode 100644 index 000000000..a4ef26bc5 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureChainingWriter.cs @@ -0,0 +1,484 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class FeatureChainingWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public FeatureChainingWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IFeatureChaining poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:FeatureChaining"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.ChainingFeature != null && poco.ChainingFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("chainingFeature", poco.ChainingFeature.Id.ToString()); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (poco.ChainingFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ChainingFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.ChainingFeature, "chainingFeature", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IFeatureChaining poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:FeatureChaining"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.ChainingFeature != null && poco.ChainingFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "chainingFeature", null, poco.ChainingFeature.Id.ToString()); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (poco.ChainingFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ChainingFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.ChainingFeature, "chainingFeature", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureInvertingWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureInvertingWriter.cs new file mode 100644 index 000000000..6369eae14 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureInvertingWriter.cs @@ -0,0 +1,510 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class FeatureInvertingWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public FeatureInvertingWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IFeatureInverting poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:FeatureInverting"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.FeatureInverted != null && poco.FeatureInverted.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureInverted", poco.FeatureInverted.Id.ToString()); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.InvertingFeature != null && poco.InvertingFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("invertingFeature", poco.InvertingFeature.Id.ToString()); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.FeatureInverted != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.FeatureInverted.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.FeatureInverted, "featureInverted", elementOriginMap, currentFileUri); + } + } + + if (poco.InvertingFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.InvertingFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.InvertingFeature, "invertingFeature", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IFeatureInverting poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:FeatureInverting"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.FeatureInverted != null && poco.FeatureInverted.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureInverted", null, poco.FeatureInverted.Id.ToString()); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.InvertingFeature != null && poco.InvertingFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "invertingFeature", null, poco.InvertingFeature.Id.ToString()); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.FeatureInverted != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.FeatureInverted.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.FeatureInverted, "featureInverted", elementOriginMap, currentFileUri); + } + } + + if (poco.InvertingFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.InvertingFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.InvertingFeature, "invertingFeature", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureMembershipWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureMembershipWriter.cs new file mode 100644 index 000000000..e824056d9 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureMembershipWriter.cs @@ -0,0 +1,550 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class FeatureMembershipWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public FeatureMembershipWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IFeatureMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:FeatureMembership"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + xmlWriter.WriteAttributeString("ownedMemberElementId", poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedMemberFeature != null && poco.ownedMemberFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedMemberFeature", poco.ownedMemberFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + xmlWriter.WriteAttributeString("ownedMemberName", poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + xmlWriter.WriteAttributeString("ownedMemberShortName", poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMemberFeature != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedMemberFeature, "ownedMemberFeature", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IFeatureMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:FeatureMembership"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberElementId", null, poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedMemberFeature != null && poco.ownedMemberFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberFeature", null, poco.ownedMemberFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberName", null, poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberShortName", null, poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMemberFeature != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedMemberFeature, "ownedMemberFeature", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureReferenceExpressionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureReferenceExpressionWriter.cs new file mode 100644 index 000000000..2a9790955 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureReferenceExpressionWriter.cs @@ -0,0 +1,1705 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Expressions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class FeatureReferenceExpressionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public FeatureReferenceExpressionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IFeatureReferenceExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:FeatureReferenceExpression"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("function", poco.function.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.referent != null && poco.referent.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("referent", poco.referent.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.referent != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.referent.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.referent, "referent", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IFeatureReferenceExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:FeatureReferenceExpression"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "function", null, poco.function.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.referent != null && poco.referent.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "referent", null, poco.referent.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.referent != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.referent.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.referent, "referent", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureTypingWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureTypingWriter.cs new file mode 100644 index 000000000..6e6f394bf --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureTypingWriter.cs @@ -0,0 +1,511 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class FeatureTypingWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public FeatureTypingWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IFeatureTyping poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:FeatureTyping"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.Type != null && poco.Type.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("type", poco.Type.Id.ToString()); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.TypedFeature != null && poco.TypedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("typedFeature", poco.TypedFeature.Id.ToString()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.Type != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.Type.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.Type, "type", elementOriginMap, currentFileUri); + } + } + + if (poco.TypedFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.TypedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.TypedFeature, "typedFeature", elementOriginMap, currentFileUri); + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IFeatureTyping poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:FeatureTyping"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.Type != null && poco.Type.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "type", null, poco.Type.Id.ToString()); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.TypedFeature != null && poco.TypedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "typedFeature", null, poco.TypedFeature.Id.ToString()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.Type != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.Type.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.Type, "type", elementOriginMap, currentFileUri); + } + } + + if (poco.TypedFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.TypedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.TypedFeature, "typedFeature", elementOriginMap, currentFileUri); + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureValueWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureValueWriter.cs new file mode 100644 index 000000000..4d86f8e15 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureValueWriter.cs @@ -0,0 +1,609 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.FeatureValues; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class FeatureValueWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public FeatureValueWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IFeatureValue poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:FeatureValue"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureWithValue != null && poco.featureWithValue.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureWithValue", poco.featureWithValue.Id.ToString()); + } + } + + if (poco.IsDefault) + { + xmlWriter.WriteAttributeString("isDefault", "true"); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsInitial) + { + xmlWriter.WriteAttributeString("isInitial", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + xmlWriter.WriteAttributeString("ownedMemberElementId", poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + xmlWriter.WriteAttributeString("ownedMemberName", poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + xmlWriter.WriteAttributeString("ownedMemberShortName", poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.value != null && poco.value.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("value", poco.value.Id.ToString()); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureWithValue != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureWithValue.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureWithValue, "featureWithValue", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.value != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.value, "value", writerOptions, elementOriginMap, currentFileUri); + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IFeatureValue poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:FeatureValue"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureWithValue != null && poco.featureWithValue.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureWithValue", null, poco.featureWithValue.Id.ToString()); + } + } + + if (poco.IsDefault) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDefault", null, "true"); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsInitial) + { + await xmlWriter.WriteAttributeStringAsync(null, "isInitial", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberElementId", null, poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberName", null, poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberShortName", null, poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.value != null && poco.value.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "value", null, poco.value.Id.ToString()); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureWithValue != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureWithValue.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureWithValue, "featureWithValue", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.value != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.value, "value", writerOptions, elementOriginMap, currentFileUri); + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureWriter.cs new file mode 100644 index 000000000..3d267b4fc --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FeatureWriter.cs @@ -0,0 +1,1572 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class FeatureWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public FeatureWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IFeature poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Feature"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IFeature poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Feature"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FlowDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FlowDefinitionWriter.cs new file mode 100644 index 000000000..4297a7c3d --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FlowDefinitionWriter.cs @@ -0,0 +1,1969 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Associations; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Interactions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class FlowDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public FlowDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IFlowDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:FlowDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceType != null && poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceType", poco.sourceType.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.action != null) + { + foreach (var item in poco.action) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "action", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.flowEnd != null) + { + foreach (var item in poco.flowEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "flowEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedType != null) + { + foreach (var item in poco.relatedType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceType, "sourceType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetType != null) + { + foreach (var item in poco.targetType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "targetType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IFlowDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:FlowDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceType != null && poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceType", null, poco.sourceType.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.action != null) + { + foreach (var item in poco.action) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "action", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.flowEnd != null) + { + foreach (var item in poco.flowEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "flowEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedType != null) + { + foreach (var item in poco.relatedType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceType, "sourceType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetType != null) + { + foreach (var item in poco.targetType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "targetType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FlowEndWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FlowEndWriter.cs new file mode 100644 index 000000000..98d23f712 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FlowEndWriter.cs @@ -0,0 +1,1573 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Interactions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class FlowEndWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public FlowEndWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IFlowEnd poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:FlowEnd"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IFlowEnd poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:FlowEnd"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FlowUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FlowUsageWriter.cs new file mode 100644 index 000000000..4f7d999c8 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FlowUsageWriter.cs @@ -0,0 +1,2797 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Associations; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Connectors; + using SysML2.NET.Core.POCO.Kernel.Interactions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class FlowUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public FlowUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IFlowUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:FlowUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("defaultFeaturingType", poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.payloadFeature != null && poco.payloadFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("payloadFeature", poco.payloadFeature.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceFeature", poco.sourceFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceOutputFeature != null && poco.sourceOutputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceOutputFeature", poco.sourceOutputFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.targetInputFeature != null && poco.targetInputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("targetInputFeature", poco.targetInputFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.flowDefinition != null) + { + foreach (var item in poco.flowDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "flowDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.flowEnd != null) + { + foreach (var item in poco.flowEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "flowEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.payloadFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.payloadFeature, "payloadFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadType != null) + { + foreach (var item in poco.payloadType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "payloadType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceOutputFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceOutputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceOutputFeature, "sourceOutputFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetInputFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.targetInputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.targetInputFeature, "targetInputFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IFlowUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:FlowUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "defaultFeaturingType", null, poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.payloadFeature != null && poco.payloadFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "payloadFeature", null, poco.payloadFeature.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceFeature", null, poco.sourceFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceOutputFeature != null && poco.sourceOutputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceOutputFeature", null, poco.sourceOutputFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.targetInputFeature != null && poco.targetInputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "targetInputFeature", null, poco.targetInputFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.flowDefinition != null) + { + foreach (var item in poco.flowDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "flowDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.flowEnd != null) + { + foreach (var item in poco.flowEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "flowEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.payloadFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.payloadFeature, "payloadFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadType != null) + { + foreach (var item in poco.payloadType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "payloadType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceOutputFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceOutputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceOutputFeature, "sourceOutputFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetInputFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.targetInputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.targetInputFeature, "targetInputFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FlowWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FlowWriter.cs new file mode 100644 index 000000000..f83758cf9 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FlowWriter.cs @@ -0,0 +1,1881 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Associations; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Connectors; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Interactions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class FlowWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public FlowWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IFlow poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Flow"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("defaultFeaturingType", poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.payloadFeature != null && poco.payloadFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("payloadFeature", poco.payloadFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceFeature", poco.sourceFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceOutputFeature != null && poco.sourceOutputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceOutputFeature", poco.sourceOutputFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.targetInputFeature != null && poco.targetInputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("targetInputFeature", poco.targetInputFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.flowEnd != null) + { + foreach (var item in poco.flowEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "flowEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.interaction != null) + { + foreach (var item in poco.interaction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "interaction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.payloadFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.payloadFeature, "payloadFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadType != null) + { + foreach (var item in poco.payloadType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "payloadType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceOutputFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceOutputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceOutputFeature, "sourceOutputFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetInputFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.targetInputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.targetInputFeature, "targetInputFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IFlow poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Flow"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "defaultFeaturingType", null, poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.payloadFeature != null && poco.payloadFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "payloadFeature", null, poco.payloadFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceFeature", null, poco.sourceFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceOutputFeature != null && poco.sourceOutputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceOutputFeature", null, poco.sourceOutputFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.targetInputFeature != null && poco.targetInputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "targetInputFeature", null, poco.targetInputFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.flowEnd != null) + { + foreach (var item in poco.flowEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "flowEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.interaction != null) + { + foreach (var item in poco.interaction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "interaction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.payloadFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.payloadFeature, "payloadFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadType != null) + { + foreach (var item in poco.payloadType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "payloadType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceOutputFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceOutputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceOutputFeature, "sourceOutputFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetInputFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.targetInputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.targetInputFeature, "targetInputFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ForLoopActionUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ForLoopActionUsageWriter.cs new file mode 100644 index 000000000..a6c3ca649 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ForLoopActionUsageWriter.cs @@ -0,0 +1,2583 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ForLoopActionUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ForLoopActionUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IForLoopActionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ForLoopActionUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.bodyAction != null && poco.bodyAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("bodyAction", poco.bodyAction.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.loopVariable != null && poco.loopVariable.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("loopVariable", poco.loopVariable.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.seqArgument != null && poco.seqArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("seqArgument", poco.seqArgument.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.bodyAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.bodyAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.bodyAction, "bodyAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.loopVariable != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.loopVariable.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.loopVariable, "loopVariable", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.seqArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.seqArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.seqArgument, "seqArgument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IForLoopActionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ForLoopActionUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.bodyAction != null && poco.bodyAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "bodyAction", null, poco.bodyAction.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.loopVariable != null && poco.loopVariable.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "loopVariable", null, poco.loopVariable.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.seqArgument != null && poco.seqArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "seqArgument", null, poco.seqArgument.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.bodyAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.bodyAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.bodyAction, "bodyAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.loopVariable != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.loopVariable.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.loopVariable, "loopVariable", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.seqArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.seqArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.seqArgument, "seqArgument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ForkNodeWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ForkNodeWriter.cs new file mode 100644 index 000000000..9fab02c53 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ForkNodeWriter.cs @@ -0,0 +1,2468 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ForkNodeWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ForkNodeWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IForkNode poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ForkNode"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IForkNode poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ForkNode"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FramedConcernMembershipWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FramedConcernMembershipWriter.cs new file mode 100644 index 000000000..bffce5074 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FramedConcernMembershipWriter.cs @@ -0,0 +1,601 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.Systems.Requirements; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class FramedConcernMembershipWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public FramedConcernMembershipWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IFramedConcernMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:FramedConcernMembership"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.Kind != RequirementConstraintKind.Requirement) + { + xmlWriter.WriteAttributeString("kind", poco.Kind.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConcern != null && poco.ownedConcern.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConcern", poco.ownedConcern.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + xmlWriter.WriteAttributeString("ownedMemberElementId", poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + xmlWriter.WriteAttributeString("ownedMemberName", poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + xmlWriter.WriteAttributeString("ownedMemberShortName", poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.referencedConcern != null && poco.referencedConcern.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("referencedConcern", poco.referencedConcern.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConcern, "ownedConcern", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.referencedConcern != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.referencedConcern.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.referencedConcern, "referencedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IFramedConcernMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:FramedConcernMembership"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.Kind != RequirementConstraintKind.Requirement) + { + await xmlWriter.WriteAttributeStringAsync(null, "kind", null, poco.Kind.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConcern != null && poco.ownedConcern.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConcern", null, poco.ownedConcern.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberElementId", null, poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberName", null, poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberShortName", null, poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.referencedConcern != null && poco.referencedConcern.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "referencedConcern", null, poco.referencedConcern.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConcern, "ownedConcern", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.referencedConcern != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.referencedConcern.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.referencedConcern, "referencedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FunctionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FunctionWriter.cs new file mode 100644 index 000000000..44efab7a1 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/FunctionWriter.cs @@ -0,0 +1,1190 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class FunctionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public FunctionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IFunction poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Function"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IFunction poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Function"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/IfActionUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/IfActionUsageWriter.cs new file mode 100644 index 000000000..e9c85afcf --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/IfActionUsageWriter.cs @@ -0,0 +1,2583 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class IfActionUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public IfActionUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IIfActionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:IfActionUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.elseAction != null && poco.elseAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("elseAction", poco.elseAction.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ifArgument != null && poco.ifArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ifArgument", poco.ifArgument.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.thenAction != null && poco.thenAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("thenAction", poco.thenAction.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.elseAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.elseAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.elseAction, "elseAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ifArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ifArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.ifArgument, "ifArgument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.thenAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.thenAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.thenAction, "thenAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IIfActionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:IfActionUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.elseAction != null && poco.elseAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elseAction", null, poco.elseAction.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ifArgument != null && poco.ifArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ifArgument", null, poco.ifArgument.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.thenAction != null && poco.thenAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "thenAction", null, poco.thenAction.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.elseAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.elseAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.elseAction, "elseAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ifArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ifArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.ifArgument, "ifArgument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.thenAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.thenAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.thenAction, "thenAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/IncludeUseCaseUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/IncludeUseCaseUsageWriter.cs new file mode 100644 index 000000000..76f9ba992 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/IncludeUseCaseUsageWriter.cs @@ -0,0 +1,2719 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class IncludeUseCaseUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public IncludeUseCaseUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IIncludeUseCaseUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:IncludeUseCaseUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "false"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.objectiveRequirement != null && poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("objectiveRequirement", poco.objectiveRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("subjectParameter", poco.subjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.useCaseDefinition != null && poco.useCaseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("useCaseDefinition", poco.useCaseDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.useCaseIncluded != null && poco.useCaseIncluded.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("useCaseIncluded", poco.useCaseIncluded.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.includedUseCase != null) + { + foreach (var item in poco.includedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "includedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.objectiveRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.objectiveRequirement, "objectiveRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.useCaseDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.useCaseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.useCaseDefinition, "useCaseDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.useCaseIncluded != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.useCaseIncluded.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.useCaseIncluded, "useCaseIncluded", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IIncludeUseCaseUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:IncludeUseCaseUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "false"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.objectiveRequirement != null && poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "objectiveRequirement", null, poco.objectiveRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "subjectParameter", null, poco.subjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.useCaseDefinition != null && poco.useCaseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "useCaseDefinition", null, poco.useCaseDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.useCaseIncluded != null && poco.useCaseIncluded.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "useCaseIncluded", null, poco.useCaseIncluded.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.includedUseCase != null) + { + foreach (var item in poco.includedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "includedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.objectiveRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.objectiveRequirement, "objectiveRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.useCaseDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.useCaseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.useCaseDefinition, "useCaseDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.useCaseIncluded != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.useCaseIncluded.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.useCaseIncluded, "useCaseIncluded", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/IndexExpressionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/IndexExpressionWriter.cs new file mode 100644 index 000000000..561047666 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/IndexExpressionWriter.cs @@ -0,0 +1,1743 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Expressions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class IndexExpressionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public IndexExpressionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IIndexExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:IndexExpression"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("function", poco.function.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.instantiatedType != null && poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("instantiatedType", poco.instantiatedType.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (poco.Operator != "#") + { + if (!string.IsNullOrWhiteSpace(poco.Operator)) + { + xmlWriter.WriteAttributeString("operator", poco.Operator); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.argument != null) + { + foreach (var item in poco.argument) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "argument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.instantiatedType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.instantiatedType, "instantiatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IIndexExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:IndexExpression"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "function", null, poco.function.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.instantiatedType != null && poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "instantiatedType", null, poco.instantiatedType.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (poco.Operator != "#") + { + if (!string.IsNullOrWhiteSpace(poco.Operator)) + { + await xmlWriter.WriteAttributeStringAsync(null, "operator", null, poco.Operator); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.argument != null) + { + foreach (var item in poco.argument) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "argument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.instantiatedType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.instantiatedType, "instantiatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/InteractionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/InteractionWriter.cs new file mode 100644 index 000000000..777622674 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/InteractionWriter.cs @@ -0,0 +1,1223 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Associations; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Interactions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class InteractionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public InteractionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IInteraction poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Interaction"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceType != null && poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceType", poco.sourceType.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.associationEnd != null) + { + foreach (var item in poco.associationEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "associationEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedType != null) + { + foreach (var item in poco.relatedType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceType, "sourceType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetType != null) + { + foreach (var item in poco.targetType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "targetType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IInteraction poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Interaction"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceType != null && poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceType", null, poco.sourceType.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.associationEnd != null) + { + foreach (var item in poco.associationEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "associationEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedType != null) + { + foreach (var item in poco.relatedType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceType, "sourceType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetType != null) + { + foreach (var item in poco.targetType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "targetType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/InterfaceDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/InterfaceDefinitionWriter.cs new file mode 100644 index 000000000..10bf91e58 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/InterfaceDefinitionWriter.cs @@ -0,0 +1,1923 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Associations; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class InterfaceDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public InterfaceDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IInterfaceDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:InterfaceDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (!poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceType != null && poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceType", poco.sourceType.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.interfaceEnd != null) + { + foreach (var item in poco.interfaceEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "interfaceEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedType != null) + { + foreach (var item in poco.relatedType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceType, "sourceType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetType != null) + { + foreach (var item in poco.targetType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "targetType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IInterfaceDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:InterfaceDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (!poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceType != null && poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceType", null, poco.sourceType.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.interfaceEnd != null) + { + foreach (var item in poco.interfaceEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "interfaceEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedType != null) + { + foreach (var item in poco.relatedType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceType, "sourceType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetType != null) + { + foreach (var item in poco.targetType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "targetType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/InterfaceUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/InterfaceUsageWriter.cs new file mode 100644 index 000000000..a8d5913bf --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/InterfaceUsageWriter.cs @@ -0,0 +1,2660 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Associations; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Connectors; + using SysML2.NET.Core.POCO.Kernel.Structures; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class InterfaceUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public InterfaceUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IInterfaceUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:InterfaceUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("defaultFeaturingType", poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceFeature", poco.sourceFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.interfaceDefinition != null) + { + foreach (var item in poco.interfaceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "interfaceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.itemDefinition != null) + { + foreach (var item in poco.itemDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "itemDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.partDefinition != null) + { + foreach (var item in poco.partDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "partDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IInterfaceUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:InterfaceUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "defaultFeaturingType", null, poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceFeature", null, poco.sourceFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.interfaceDefinition != null) + { + foreach (var item in poco.interfaceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "interfaceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.itemDefinition != null) + { + foreach (var item in poco.itemDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "itemDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.partDefinition != null) + { + foreach (var item in poco.partDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "partDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/IntersectingWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/IntersectingWriter.cs new file mode 100644 index 000000000..520de01ae --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/IntersectingWriter.cs @@ -0,0 +1,484 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class IntersectingWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public IntersectingWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IIntersecting poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Intersecting"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.IntersectingType != null && poco.IntersectingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("intersectingType", poco.IntersectingType.Id.ToString()); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.IntersectingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.IntersectingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.IntersectingType, "intersectingType", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IIntersecting poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Intersecting"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.IntersectingType != null && poco.IntersectingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "intersectingType", null, poco.IntersectingType.Id.ToString()); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.IntersectingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.IntersectingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.IntersectingType, "intersectingType", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/InvariantWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/InvariantWriter.cs new file mode 100644 index 000000000..5af1646e2 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/InvariantWriter.cs @@ -0,0 +1,1676 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class InvariantWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public InvariantWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IInvariant poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Invariant"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsNegated) + { + xmlWriter.WriteAttributeString("isNegated", "true"); + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.predicate != null && poco.predicate.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("predicate", poco.predicate.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.predicate != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.predicate.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.predicate, "predicate", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IInvariant poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Invariant"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsNegated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isNegated", null, "true"); + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.predicate != null && poco.predicate.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "predicate", null, poco.predicate.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.predicate != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.predicate.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.predicate, "predicate", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/InvocationExpressionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/InvocationExpressionWriter.cs new file mode 100644 index 000000000..21e91e408 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/InvocationExpressionWriter.cs @@ -0,0 +1,1727 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Expressions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class InvocationExpressionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public InvocationExpressionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IInvocationExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:InvocationExpression"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("function", poco.function.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.instantiatedType != null && poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("instantiatedType", poco.instantiatedType.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.argument != null) + { + foreach (var item in poco.argument) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "argument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.instantiatedType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.instantiatedType, "instantiatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IInvocationExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:InvocationExpression"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "function", null, poco.function.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.instantiatedType != null && poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "instantiatedType", null, poco.instantiatedType.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.argument != null) + { + foreach (var item in poco.argument) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "argument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.instantiatedType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.instantiatedType, "instantiatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ItemDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ItemDefinitionWriter.cs new file mode 100644 index 000000000..1747dc6d0 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ItemDefinitionWriter.cs @@ -0,0 +1,1815 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Structures; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ItemDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ItemDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IItemDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ItemDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IItemDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ItemDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ItemUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ItemUsageWriter.cs new file mode 100644 index 000000000..2be0f2f54 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ItemUsageWriter.cs @@ -0,0 +1,2468 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Structures; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ItemUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ItemUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IItemUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ItemUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.itemDefinition != null) + { + foreach (var item in poco.itemDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "itemDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IItemUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ItemUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.itemDefinition != null) + { + foreach (var item in poco.itemDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "itemDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/JoinNodeWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/JoinNodeWriter.cs new file mode 100644 index 000000000..80054946c --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/JoinNodeWriter.cs @@ -0,0 +1,2468 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class JoinNodeWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public JoinNodeWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IJoinNode poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:JoinNode"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IJoinNode poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:JoinNode"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/LibraryPackageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/LibraryPackageWriter.cs new file mode 100644 index 000000000..e97ab4e72 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/LibraryPackageWriter.cs @@ -0,0 +1,575 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Packages; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class LibraryPackageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public LibraryPackageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ILibraryPackage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:LibraryPackage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsStandard) + { + xmlWriter.WriteAttributeString("isStandard", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.filterCondition != null) + { + foreach (var item in poco.filterCondition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "filterCondition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ILibraryPackage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:LibraryPackage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsStandard) + { + await xmlWriter.WriteAttributeStringAsync(null, "isStandard", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.filterCondition != null) + { + foreach (var item in poco.filterCondition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "filterCondition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/LiteralBooleanWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/LiteralBooleanWriter.cs new file mode 100644 index 000000000..bf4f187d3 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/LiteralBooleanWriter.cs @@ -0,0 +1,1677 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Expressions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class LiteralBooleanWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public LiteralBooleanWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ILiteralBoolean poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:LiteralBoolean"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("function", poco.function.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Value) + { + xmlWriter.WriteAttributeString("value", "true"); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ILiteralBoolean poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:LiteralBoolean"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "function", null, poco.function.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Value) + { + await xmlWriter.WriteAttributeStringAsync(null, "value", null, "true"); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/LiteralExpressionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/LiteralExpressionWriter.cs new file mode 100644 index 000000000..98ae34812 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/LiteralExpressionWriter.cs @@ -0,0 +1,1667 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Expressions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class LiteralExpressionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public LiteralExpressionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ILiteralExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:LiteralExpression"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("function", poco.function.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ILiteralExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:LiteralExpression"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "function", null, poco.function.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/LiteralInfinityWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/LiteralInfinityWriter.cs new file mode 100644 index 000000000..2b558201f --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/LiteralInfinityWriter.cs @@ -0,0 +1,1667 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Expressions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class LiteralInfinityWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public LiteralInfinityWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ILiteralInfinity poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:LiteralInfinity"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("function", poco.function.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ILiteralInfinity poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:LiteralInfinity"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "function", null, poco.function.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/LiteralIntegerWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/LiteralIntegerWriter.cs new file mode 100644 index 000000000..f6abcf1c5 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/LiteralIntegerWriter.cs @@ -0,0 +1,1671 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Expressions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class LiteralIntegerWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public LiteralIntegerWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ILiteralInteger poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:LiteralInteger"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("function", poco.function.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + xmlWriter.WriteAttributeString("value", poco.Value.ToString(CultureInfo.InvariantCulture)); + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ILiteralInteger poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:LiteralInteger"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "function", null, poco.function.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + await xmlWriter.WriteAttributeStringAsync(null, "value", null, poco.Value.ToString(CultureInfo.InvariantCulture)); + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/LiteralRationalWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/LiteralRationalWriter.cs new file mode 100644 index 000000000..00cfe9664 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/LiteralRationalWriter.cs @@ -0,0 +1,1671 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Expressions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class LiteralRationalWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public LiteralRationalWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ILiteralRational poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:LiteralRational"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("function", poco.function.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + xmlWriter.WriteAttributeString("value", poco.Value.ToString(CultureInfo.InvariantCulture)); + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ILiteralRational poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:LiteralRational"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "function", null, poco.function.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + await xmlWriter.WriteAttributeStringAsync(null, "value", null, poco.Value.ToString(CultureInfo.InvariantCulture)); + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/LiteralStringWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/LiteralStringWriter.cs new file mode 100644 index 000000000..4e0b90af7 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/LiteralStringWriter.cs @@ -0,0 +1,1677 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Expressions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class LiteralStringWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public LiteralStringWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ILiteralString poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:LiteralString"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("function", poco.function.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (!string.IsNullOrWhiteSpace(poco.Value)) + { + xmlWriter.WriteAttributeString("value", poco.Value); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ILiteralString poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:LiteralString"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "function", null, poco.function.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (!string.IsNullOrWhiteSpace(poco.Value)) + { + await xmlWriter.WriteAttributeStringAsync(null, "value", null, poco.Value); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MembershipExposeWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MembershipExposeWriter.cs new file mode 100644 index 000000000..6bf021190 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MembershipExposeWriter.cs @@ -0,0 +1,553 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class MembershipExposeWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public MembershipExposeWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IMembershipExpose poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:MembershipExpose"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.importedElement != null && poco.importedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("importedElement", poco.importedElement.Id.ToString()); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.ImportedMembership != null && poco.ImportedMembership.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("importedMembership", poco.ImportedMembership.Id.ToString()); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (!poco.IsImportAll) + { + xmlWriter.WriteAttributeString("isImportAll", "false"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsRecursive) + { + xmlWriter.WriteAttributeString("isRecursive", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Protected) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedElement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.importedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.importedElement, "importedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.ImportedMembership != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ImportedMembership.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.ImportedMembership, "importedMembership", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IMembershipExpose poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:MembershipExpose"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.importedElement != null && poco.importedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "importedElement", null, poco.importedElement.Id.ToString()); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.ImportedMembership != null && poco.ImportedMembership.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "importedMembership", null, poco.ImportedMembership.Id.ToString()); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (!poco.IsImportAll) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImportAll", null, "false"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsRecursive) + { + await xmlWriter.WriteAttributeStringAsync(null, "isRecursive", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Protected) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedElement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.importedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.importedElement, "importedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.ImportedMembership != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ImportedMembership.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.ImportedMembership, "importedMembership", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MembershipImportWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MembershipImportWriter.cs new file mode 100644 index 000000000..2700a7cc0 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MembershipImportWriter.cs @@ -0,0 +1,552 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class MembershipImportWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public MembershipImportWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IMembershipImport poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:MembershipImport"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.importedElement != null && poco.importedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("importedElement", poco.importedElement.Id.ToString()); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.ImportedMembership != null && poco.ImportedMembership.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("importedMembership", poco.ImportedMembership.Id.ToString()); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsImportAll) + { + xmlWriter.WriteAttributeString("isImportAll", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsRecursive) + { + xmlWriter.WriteAttributeString("isRecursive", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Private) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedElement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.importedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.importedElement, "importedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.ImportedMembership != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ImportedMembership.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.ImportedMembership, "importedMembership", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IMembershipImport poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:MembershipImport"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.importedElement != null && poco.importedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "importedElement", null, poco.importedElement.Id.ToString()); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.ImportedMembership != null && poco.ImportedMembership.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "importedMembership", null, poco.ImportedMembership.Id.ToString()); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsImportAll) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImportAll", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsRecursive) + { + await xmlWriter.WriteAttributeStringAsync(null, "isRecursive", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Private) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedElement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.importedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.importedElement, "importedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.ImportedMembership != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ImportedMembership.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.ImportedMembership, "importedMembership", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MembershipWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MembershipWriter.cs new file mode 100644 index 000000000..ff65c9f0e --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MembershipWriter.cs @@ -0,0 +1,530 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class MembershipWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public MembershipWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Membership"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.MemberElement != null && poco.MemberElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("memberElement", poco.MemberElement.Id.ToString()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.memberElementId)) + { + xmlWriter.WriteAttributeString("memberElementId", poco.memberElementId); + } + } + + if (!string.IsNullOrWhiteSpace(poco.MemberName)) + { + xmlWriter.WriteAttributeString("memberName", poco.MemberName); + } + + if (!string.IsNullOrWhiteSpace(poco.MemberShortName)) + { + xmlWriter.WriteAttributeString("memberShortName", poco.MemberShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.MemberElement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.MemberElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.MemberElement, "memberElement", elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Membership"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.MemberElement != null && poco.MemberElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "memberElement", null, poco.MemberElement.Id.ToString()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.memberElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "memberElementId", null, poco.memberElementId); + } + } + + if (!string.IsNullOrWhiteSpace(poco.MemberName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "memberName", null, poco.MemberName); + } + + if (!string.IsNullOrWhiteSpace(poco.MemberShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "memberShortName", null, poco.MemberShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.MemberElement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.MemberElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.MemberElement, "memberElement", elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MergeNodeWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MergeNodeWriter.cs new file mode 100644 index 000000000..7ace31e4b --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MergeNodeWriter.cs @@ -0,0 +1,2468 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class MergeNodeWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public MergeNodeWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IMergeNode poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:MergeNode"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IMergeNode poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:MergeNode"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MetaclassWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MetaclassWriter.cs new file mode 100644 index 000000000..7128f6854 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MetaclassWriter.cs @@ -0,0 +1,1092 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Structures; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Metadata; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class MetaclassWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public MetaclassWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IMetaclass poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Metaclass"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IMetaclass poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Metaclass"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MetadataAccessExpressionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MetadataAccessExpressionWriter.cs new file mode 100644 index 000000000..cef6a1ac1 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MetadataAccessExpressionWriter.cs @@ -0,0 +1,1705 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Expressions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class MetadataAccessExpressionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public MetadataAccessExpressionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IMetadataAccessExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:MetadataAccessExpression"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("function", poco.function.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.referencedElement != null && poco.referencedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("referencedElement", poco.referencedElement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.referencedElement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.referencedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.referencedElement, "referencedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IMetadataAccessExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:MetadataAccessExpression"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "function", null, poco.function.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.referencedElement != null && poco.referencedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "referencedElement", null, poco.referencedElement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.referencedElement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.referencedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.referencedElement, "referencedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MetadataDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MetadataDefinitionWriter.cs new file mode 100644 index 000000000..17ec89c47 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MetadataDefinitionWriter.cs @@ -0,0 +1,1815 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Metadata; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class MetadataDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public MetadataDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IMetadataDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:MetadataDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IMetadataDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:MetadataDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MetadataFeatureWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MetadataFeatureWriter.cs new file mode 100644 index 000000000..b5464eaed --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MetadataFeatureWriter.cs @@ -0,0 +1,1677 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Metadata; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class MetadataFeatureWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public MetadataFeatureWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IMetadataFeature poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:MetadataFeature"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.metaclass != null && poco.metaclass.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("metaclass", poco.metaclass.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotatedElement != null) + { + foreach (var item in poco.annotatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "annotatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotation != null) + { + foreach (var item in poco.annotation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "annotation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.metaclass != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.metaclass.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.metaclass, "metaclass", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotatingRelationship != null) + { + foreach (var item in poco.ownedAnnotatingRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotatingRelationship", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IMetadataFeature poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:MetadataFeature"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.metaclass != null && poco.metaclass.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "metaclass", null, poco.metaclass.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotatedElement != null) + { + foreach (var item in poco.annotatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "annotatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotation != null) + { + foreach (var item in poco.annotation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "annotation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.metaclass != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.metaclass.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.metaclass, "metaclass", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotatingRelationship != null) + { + foreach (var item in poco.ownedAnnotatingRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotatingRelationship", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MetadataUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MetadataUsageWriter.cs new file mode 100644 index 000000000..782ee2c88 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MetadataUsageWriter.cs @@ -0,0 +1,2573 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Metadata; + using SysML2.NET.Core.POCO.Kernel.Structures; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class MetadataUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public MetadataUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IMetadataUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:MetadataUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.metadataDefinition != null && poco.metadataDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("metadataDefinition", poco.metadataDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotatedElement != null) + { + foreach (var item in poco.annotatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "annotatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotation != null) + { + foreach (var item in poco.annotation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "annotation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.itemDefinition != null) + { + foreach (var item in poco.itemDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "itemDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.metadataDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.metadataDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.metadataDefinition, "metadataDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotatingRelationship != null) + { + foreach (var item in poco.ownedAnnotatingRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotatingRelationship", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IMetadataUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:MetadataUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.metadataDefinition != null && poco.metadataDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "metadataDefinition", null, poco.metadataDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotatedElement != null) + { + foreach (var item in poco.annotatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "annotatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotation != null) + { + foreach (var item in poco.annotation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "annotation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.itemDefinition != null) + { + foreach (var item in poco.itemDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "itemDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.metadataDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.metadataDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.metadataDefinition, "metadataDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotatingRelationship != null) + { + foreach (var item in poco.ownedAnnotatingRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotatingRelationship", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MultiplicityRangeWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MultiplicityRangeWriter.cs new file mode 100644 index 000000000..e6ce00fc7 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MultiplicityRangeWriter.cs @@ -0,0 +1,1672 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Multiplicities; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class MultiplicityRangeWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public MultiplicityRangeWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IMultiplicityRange poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:MultiplicityRange"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.lowerBound != null && poco.lowerBound.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("lowerBound", poco.lowerBound.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.upperBound != null && poco.upperBound.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("upperBound", poco.upperBound.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.bound != null) + { + foreach (var item in poco.bound) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "bound", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.lowerBound != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.lowerBound.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.lowerBound, "lowerBound", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.upperBound != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.upperBound.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.upperBound, "upperBound", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IMultiplicityRange poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:MultiplicityRange"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.lowerBound != null && poco.lowerBound.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "lowerBound", null, poco.lowerBound.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.upperBound != null && poco.upperBound.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "upperBound", null, poco.upperBound.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.bound != null) + { + foreach (var item in poco.bound) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "bound", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.lowerBound != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.lowerBound.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.lowerBound, "lowerBound", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.upperBound != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.upperBound.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.upperBound, "upperBound", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MultiplicityWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MultiplicityWriter.cs new file mode 100644 index 000000000..f70e9ec64 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/MultiplicityWriter.cs @@ -0,0 +1,1572 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class MultiplicityWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public MultiplicityWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IMultiplicity poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Multiplicity"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IMultiplicity poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Multiplicity"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/NamespaceExposeWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/NamespaceExposeWriter.cs new file mode 100644 index 000000000..2aeda3a1a --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/NamespaceExposeWriter.cs @@ -0,0 +1,553 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class NamespaceExposeWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public NamespaceExposeWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, INamespaceExpose poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:NamespaceExpose"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.importedElement != null && poco.importedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("importedElement", poco.importedElement.Id.ToString()); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.ImportedNamespace != null && poco.ImportedNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("importedNamespace", poco.ImportedNamespace.Id.ToString()); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (!poco.IsImportAll) + { + xmlWriter.WriteAttributeString("isImportAll", "false"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsRecursive) + { + xmlWriter.WriteAttributeString("isRecursive", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Protected) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedElement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.importedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.importedElement, "importedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.ImportedNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ImportedNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.ImportedNamespace, "importedNamespace", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, INamespaceExpose poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:NamespaceExpose"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.importedElement != null && poco.importedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "importedElement", null, poco.importedElement.Id.ToString()); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.ImportedNamespace != null && poco.ImportedNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "importedNamespace", null, poco.ImportedNamespace.Id.ToString()); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (!poco.IsImportAll) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImportAll", null, "false"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsRecursive) + { + await xmlWriter.WriteAttributeStringAsync(null, "isRecursive", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Protected) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedElement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.importedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.importedElement, "importedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.ImportedNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ImportedNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.ImportedNamespace, "importedNamespace", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/NamespaceImportWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/NamespaceImportWriter.cs new file mode 100644 index 000000000..975e7e5dc --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/NamespaceImportWriter.cs @@ -0,0 +1,552 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class NamespaceImportWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public NamespaceImportWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, INamespaceImport poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:NamespaceImport"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.importedElement != null && poco.importedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("importedElement", poco.importedElement.Id.ToString()); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.ImportedNamespace != null && poco.ImportedNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("importedNamespace", poco.ImportedNamespace.Id.ToString()); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsImportAll) + { + xmlWriter.WriteAttributeString("isImportAll", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsRecursive) + { + xmlWriter.WriteAttributeString("isRecursive", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Private) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedElement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.importedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.importedElement, "importedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.ImportedNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ImportedNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.ImportedNamespace, "importedNamespace", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, INamespaceImport poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:NamespaceImport"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.importedElement != null && poco.importedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "importedElement", null, poco.importedElement.Id.ToString()); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.ImportedNamespace != null && poco.ImportedNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "importedNamespace", null, poco.ImportedNamespace.Id.ToString()); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsImportAll) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImportAll", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsRecursive) + { + await xmlWriter.WriteAttributeStringAsync(null, "isRecursive", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Private) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedElement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.importedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.importedElement, "importedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.ImportedNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ImportedNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.ImportedNamespace, "importedNamespace", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/NamespaceWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/NamespaceWriter.cs new file mode 100644 index 000000000..3f2815418 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/NamespaceWriter.cs @@ -0,0 +1,541 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class NamespaceWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public NamespaceWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, INamespace poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Namespace"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, INamespace poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Namespace"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/NullExpressionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/NullExpressionWriter.cs new file mode 100644 index 000000000..2d044d9a3 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/NullExpressionWriter.cs @@ -0,0 +1,1667 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Expressions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class NullExpressionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public NullExpressionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, INullExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:NullExpression"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("function", poco.function.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, INullExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:NullExpression"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "function", null, poco.function.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ObjectiveMembershipWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ObjectiveMembershipWriter.cs new file mode 100644 index 000000000..02c3a6b69 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ObjectiveMembershipWriter.cs @@ -0,0 +1,552 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ObjectiveMembershipWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ObjectiveMembershipWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IObjectiveMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ObjectiveMembership"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + xmlWriter.WriteAttributeString("ownedMemberElementId", poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + xmlWriter.WriteAttributeString("ownedMemberName", poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + xmlWriter.WriteAttributeString("ownedMemberShortName", poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedObjectiveRequirement != null && poco.ownedObjectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedObjectiveRequirement", poco.ownedObjectiveRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedObjectiveRequirement != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedObjectiveRequirement, "ownedObjectiveRequirement", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IObjectiveMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ObjectiveMembership"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberElementId", null, poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberName", null, poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberShortName", null, poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedObjectiveRequirement != null && poco.ownedObjectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedObjectiveRequirement", null, poco.ownedObjectiveRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedObjectiveRequirement != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedObjectiveRequirement, "ownedObjectiveRequirement", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/OccurrenceDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/OccurrenceDefinitionWriter.cs new file mode 100644 index 000000000..515e5c222 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/OccurrenceDefinitionWriter.cs @@ -0,0 +1,1815 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class OccurrenceDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public OccurrenceDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IOccurrenceDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:OccurrenceDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IOccurrenceDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:OccurrenceDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/OccurrenceUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/OccurrenceUsageWriter.cs new file mode 100644 index 000000000..f9c123957 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/OccurrenceUsageWriter.cs @@ -0,0 +1,2445 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class OccurrenceUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public OccurrenceUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IOccurrenceUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:OccurrenceUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IOccurrenceUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:OccurrenceUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/OperatorExpressionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/OperatorExpressionWriter.cs new file mode 100644 index 000000000..1ac25bc33 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/OperatorExpressionWriter.cs @@ -0,0 +1,1737 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Expressions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class OperatorExpressionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public OperatorExpressionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IOperatorExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:OperatorExpression"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("function", poco.function.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.instantiatedType != null && poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("instantiatedType", poco.instantiatedType.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (!string.IsNullOrWhiteSpace(poco.Operator)) + { + xmlWriter.WriteAttributeString("operator", poco.Operator); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.argument != null) + { + foreach (var item in poco.argument) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "argument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.instantiatedType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.instantiatedType, "instantiatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IOperatorExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:OperatorExpression"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "function", null, poco.function.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.instantiatedType != null && poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "instantiatedType", null, poco.instantiatedType.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (!string.IsNullOrWhiteSpace(poco.Operator)) + { + await xmlWriter.WriteAttributeStringAsync(null, "operator", null, poco.Operator); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.argument != null) + { + foreach (var item in poco.argument) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "argument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.instantiatedType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.instantiatedType, "instantiatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/OwningMembershipWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/OwningMembershipWriter.cs new file mode 100644 index 000000000..7a20dbfa6 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/OwningMembershipWriter.cs @@ -0,0 +1,548 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class OwningMembershipWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public OwningMembershipWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IOwningMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:OwningMembership"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedMemberElement != null && poco.ownedMemberElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedMemberElement", poco.ownedMemberElement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + xmlWriter.WriteAttributeString("ownedMemberElementId", poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + xmlWriter.WriteAttributeString("ownedMemberName", poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + xmlWriter.WriteAttributeString("ownedMemberShortName", poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMemberElement != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedMemberElement, "ownedMemberElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IOwningMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:OwningMembership"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedMemberElement != null && poco.ownedMemberElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberElement", null, poco.ownedMemberElement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberElementId", null, poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberName", null, poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberShortName", null, poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMemberElement != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedMemberElement, "ownedMemberElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PackageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PackageWriter.cs new file mode 100644 index 000000000..d70f74b85 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PackageWriter.cs @@ -0,0 +1,565 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Packages; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class PackageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public PackageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IPackage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Package"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.filterCondition != null) + { + foreach (var item in poco.filterCondition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "filterCondition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IPackage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Package"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.filterCondition != null) + { + foreach (var item in poco.filterCondition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "filterCondition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ParameterMembershipWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ParameterMembershipWriter.cs new file mode 100644 index 000000000..7e3893681 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ParameterMembershipWriter.cs @@ -0,0 +1,551 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ParameterMembershipWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ParameterMembershipWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IParameterMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ParameterMembership"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + xmlWriter.WriteAttributeString("ownedMemberElementId", poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + xmlWriter.WriteAttributeString("ownedMemberName", poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedMemberParameter != null && poco.ownedMemberParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedMemberParameter", poco.ownedMemberParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + xmlWriter.WriteAttributeString("ownedMemberShortName", poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMemberParameter != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedMemberParameter, "ownedMemberParameter", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IParameterMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ParameterMembership"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberElementId", null, poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberName", null, poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedMemberParameter != null && poco.ownedMemberParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberParameter", null, poco.ownedMemberParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberShortName", null, poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMemberParameter != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedMemberParameter, "ownedMemberParameter", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PartDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PartDefinitionWriter.cs new file mode 100644 index 000000000..5e9d728e8 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PartDefinitionWriter.cs @@ -0,0 +1,1814 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class PartDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public PartDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IPartDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:PartDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IPartDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:PartDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PartUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PartUsageWriter.cs new file mode 100644 index 000000000..2ced60b93 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PartUsageWriter.cs @@ -0,0 +1,2490 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Structures; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class PartUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public PartUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IPartUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:PartUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.itemDefinition != null) + { + foreach (var item in poco.itemDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "itemDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.partDefinition != null) + { + foreach (var item in poco.partDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "partDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IPartUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:PartUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.itemDefinition != null) + { + foreach (var item in poco.itemDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "itemDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.partDefinition != null) + { + foreach (var item in poco.partDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "partDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PayloadFeatureWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PayloadFeatureWriter.cs new file mode 100644 index 000000000..00513cd2e --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PayloadFeatureWriter.cs @@ -0,0 +1,1573 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Interactions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class PayloadFeatureWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public PayloadFeatureWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IPayloadFeature poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:PayloadFeature"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IPayloadFeature poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:PayloadFeature"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PerformActionUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PerformActionUsageWriter.cs new file mode 100644 index 000000000..147a8a721 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PerformActionUsageWriter.cs @@ -0,0 +1,2506 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class PerformActionUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public PerformActionUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IPerformActionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:PerformActionUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "false"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.performedAction != null && poco.performedAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("performedAction", poco.performedAction.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.performedAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.performedAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.performedAction, "performedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IPerformActionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:PerformActionUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "false"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.performedAction != null && poco.performedAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "performedAction", null, poco.performedAction.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.performedAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.performedAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.performedAction, "performedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PortConjugationWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PortConjugationWriter.cs new file mode 100644 index 000000000..bfdd500e3 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PortConjugationWriter.cs @@ -0,0 +1,549 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class PortConjugationWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public PortConjugationWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IPortConjugation poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:PortConjugation"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.conjugatedPortDefinition != null && poco.conjugatedPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("conjugatedPortDefinition", poco.conjugatedPortDefinition.Id.ToString()); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.ConjugatedType != null && poco.ConjugatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("conjugatedType", poco.ConjugatedType.Id.ToString()); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.OriginalPortDefinition != null && poco.OriginalPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("originalPortDefinition", poco.OriginalPortDefinition.Id.ToString()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.conjugatedPortDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.conjugatedPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.conjugatedPortDefinition, "conjugatedPortDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (poco.ConjugatedType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ConjugatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.ConjugatedType, "conjugatedType", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OriginalPortDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.OriginalPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.OriginalPortDefinition, "originalPortDefinition", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IPortConjugation poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:PortConjugation"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.conjugatedPortDefinition != null && poco.conjugatedPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "conjugatedPortDefinition", null, poco.conjugatedPortDefinition.Id.ToString()); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.ConjugatedType != null && poco.ConjugatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "conjugatedType", null, poco.ConjugatedType.Id.ToString()); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.OriginalPortDefinition != null && poco.OriginalPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "originalPortDefinition", null, poco.OriginalPortDefinition.Id.ToString()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.conjugatedPortDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.conjugatedPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.conjugatedPortDefinition, "conjugatedPortDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (poco.ConjugatedType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ConjugatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.ConjugatedType, "conjugatedType", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OriginalPortDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.OriginalPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.OriginalPortDefinition, "originalPortDefinition", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PortDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PortDefinitionWriter.cs new file mode 100644 index 000000000..197435752 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PortDefinitionWriter.cs @@ -0,0 +1,1853 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Structures; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class PortDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public PortDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IPortDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:PortDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.conjugatedPortDefinition != null && poco.conjugatedPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("conjugatedPortDefinition", poco.conjugatedPortDefinition.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.conjugatedPortDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.conjugatedPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.conjugatedPortDefinition, "conjugatedPortDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IPortDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:PortDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.conjugatedPortDefinition != null && poco.conjugatedPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "conjugatedPortDefinition", null, poco.conjugatedPortDefinition.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.conjugatedPortDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.conjugatedPortDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.conjugatedPortDefinition, "conjugatedPortDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PortUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PortUsageWriter.cs new file mode 100644 index 000000000..0cc7f0b7f --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PortUsageWriter.cs @@ -0,0 +1,2445 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class PortUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public PortUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IPortUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:PortUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.portDefinition != null) + { + foreach (var item in poco.portDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "portDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IPortUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:PortUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.portDefinition != null) + { + foreach (var item in poco.portDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "portDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PredicateWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PredicateWriter.cs new file mode 100644 index 000000000..d8df3a50b --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/PredicateWriter.cs @@ -0,0 +1,1190 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class PredicateWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public PredicateWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IPredicate poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Predicate"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IPredicate poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Predicate"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/RedefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/RedefinitionWriter.cs new file mode 100644 index 000000000..ba04f8c67 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/RedefinitionWriter.cs @@ -0,0 +1,511 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class RedefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public RedefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IRedefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Redefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.RedefinedFeature != null && poco.RedefinedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("redefinedFeature", poco.RedefinedFeature.Id.ToString()); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.RedefiningFeature != null && poco.RedefiningFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("redefiningFeature", poco.RedefiningFeature.Id.ToString()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (poco.RedefinedFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.RedefinedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.RedefinedFeature, "redefinedFeature", elementOriginMap, currentFileUri); + } + } + + if (poco.RedefiningFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.RedefiningFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.RedefiningFeature, "redefiningFeature", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IRedefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Redefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.RedefinedFeature != null && poco.RedefinedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "redefinedFeature", null, poco.RedefinedFeature.Id.ToString()); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.RedefiningFeature != null && poco.RedefiningFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "redefiningFeature", null, poco.RedefiningFeature.Id.ToString()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (poco.RedefinedFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.RedefinedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.RedefinedFeature, "redefinedFeature", elementOriginMap, currentFileUri); + } + } + + if (poco.RedefiningFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.RedefiningFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.RedefiningFeature, "redefiningFeature", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ReferenceSubsettingWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ReferenceSubsettingWriter.cs new file mode 100644 index 000000000..c6ab8588d --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ReferenceSubsettingWriter.cs @@ -0,0 +1,485 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ReferenceSubsettingWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ReferenceSubsettingWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IReferenceSubsetting poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ReferenceSubsetting"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.ReferencedFeature != null && poco.ReferencedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("referencedFeature", poco.ReferencedFeature.Id.ToString()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (poco.ReferencedFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ReferencedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.ReferencedFeature, "referencedFeature", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IReferenceSubsetting poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ReferenceSubsetting"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.ReferencedFeature != null && poco.ReferencedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "referencedFeature", null, poco.ReferencedFeature.Id.ToString()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (poco.ReferencedFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.ReferencedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.ReferencedFeature, "referencedFeature", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ReferenceUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ReferenceUsageWriter.cs new file mode 100644 index 000000000..9f8d4f271 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ReferenceUsageWriter.cs @@ -0,0 +1,2385 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ReferenceUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ReferenceUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IReferenceUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ReferenceUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "false"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.definition != null) + { + foreach (var item in poco.definition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "definition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IReferenceUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ReferenceUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "false"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.definition != null) + { + foreach (var item in poco.definition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "definition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/RenderingDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/RenderingDefinitionWriter.cs new file mode 100644 index 000000000..12b09f4c2 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/RenderingDefinitionWriter.cs @@ -0,0 +1,1836 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class RenderingDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public RenderingDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IRenderingDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:RenderingDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.rendering != null) + { + foreach (var item in poco.rendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "rendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IRenderingDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:RenderingDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.rendering != null) + { + foreach (var item in poco.rendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "rendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/RenderingUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/RenderingUsageWriter.cs new file mode 100644 index 000000000..019385927 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/RenderingUsageWriter.cs @@ -0,0 +1,2506 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Structures; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class RenderingUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public RenderingUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IRenderingUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:RenderingUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.renderingDefinition != null && poco.renderingDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("renderingDefinition", poco.renderingDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.itemDefinition != null) + { + foreach (var item in poco.itemDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "itemDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.renderingDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.renderingDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.renderingDefinition, "renderingDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IRenderingUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:RenderingUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.renderingDefinition != null && poco.renderingDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "renderingDefinition", null, poco.renderingDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.itemDefinition != null) + { + foreach (var item in poco.itemDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "itemDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.renderingDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.renderingDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.renderingDefinition, "renderingDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/RequirementConstraintMembershipWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/RequirementConstraintMembershipWriter.cs new file mode 100644 index 000000000..c6f32e351 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/RequirementConstraintMembershipWriter.cs @@ -0,0 +1,595 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.Systems.Requirements; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class RequirementConstraintMembershipWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public RequirementConstraintMembershipWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IRequirementConstraintMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:RequirementConstraintMembership"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + xmlWriter.WriteAttributeString("kind", poco.Kind.ToString().ToLower()); + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConstraint != null && poco.ownedConstraint.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConstraint", poco.ownedConstraint.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + xmlWriter.WriteAttributeString("ownedMemberElementId", poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + xmlWriter.WriteAttributeString("ownedMemberName", poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + xmlWriter.WriteAttributeString("ownedMemberShortName", poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.referencedConstraint != null && poco.referencedConstraint.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("referencedConstraint", poco.referencedConstraint.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConstraint, "ownedConstraint", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.referencedConstraint != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.referencedConstraint.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.referencedConstraint, "referencedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IRequirementConstraintMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:RequirementConstraintMembership"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + await xmlWriter.WriteAttributeStringAsync(null, "kind", null, poco.Kind.ToString().ToLower()); + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConstraint != null && poco.ownedConstraint.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConstraint", null, poco.ownedConstraint.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberElementId", null, poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberName", null, poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberShortName", null, poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.referencedConstraint != null && poco.referencedConstraint.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "referencedConstraint", null, poco.referencedConstraint.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConstraint, "ownedConstraint", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.referencedConstraint != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.referencedConstraint.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.referencedConstraint, "referencedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/RequirementDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/RequirementDefinitionWriter.cs new file mode 100644 index 000000000..eca6b3838 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/RequirementDefinitionWriter.cs @@ -0,0 +1,2078 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class RequirementDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public RequirementDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IRequirementDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:RequirementDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ReqId)) + { + xmlWriter.WriteAttributeString("reqId", poco.ReqId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("subjectParameter", poco.subjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.text != null && poco.text.Count > 0) + { + xmlWriter.WriteAttributeString("text", string.Join(" ", poco.text)); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.assumedConstraint != null) + { + foreach (var item in poco.assumedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "assumedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.framedConcern != null) + { + foreach (var item in poco.framedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "framedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.requiredConstraint != null) + { + foreach (var item in poco.requiredConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "requiredConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.stakeholderParameter != null) + { + foreach (var item in poco.stakeholderParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "stakeholderParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IRequirementDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:RequirementDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ReqId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "reqId", null, poco.ReqId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "subjectParameter", null, poco.subjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.text != null && poco.text.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "text", null, string.Join(" ", poco.text)); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.assumedConstraint != null) + { + foreach (var item in poco.assumedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "assumedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.framedConcern != null) + { + foreach (var item in poco.framedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "framedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.requiredConstraint != null) + { + foreach (var item in poco.requiredConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "requiredConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.stakeholderParameter != null) + { + foreach (var item in poco.stakeholderParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "stakeholderParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/RequirementUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/RequirementUsageWriter.cs new file mode 100644 index 000000000..8c7da058a --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/RequirementUsageWriter.cs @@ -0,0 +1,2703 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class RequirementUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public RequirementUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IRequirementUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:RequirementUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ReqId)) + { + xmlWriter.WriteAttributeString("reqId", poco.ReqId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.requirementDefinition != null && poco.requirementDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("requirementDefinition", poco.requirementDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("subjectParameter", poco.subjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.text != null && poco.text.Count > 0) + { + xmlWriter.WriteAttributeString("text", string.Join(" ", poco.text)); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.assumedConstraint != null) + { + foreach (var item in poco.assumedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "assumedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.framedConcern != null) + { + foreach (var item in poco.framedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "framedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.requiredConstraint != null) + { + foreach (var item in poco.requiredConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "requiredConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.requirementDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.requirementDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.requirementDefinition, "requirementDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.stakeholderParameter != null) + { + foreach (var item in poco.stakeholderParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "stakeholderParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IRequirementUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:RequirementUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ReqId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "reqId", null, poco.ReqId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.requirementDefinition != null && poco.requirementDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "requirementDefinition", null, poco.requirementDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "subjectParameter", null, poco.subjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.text != null && poco.text.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "text", null, string.Join(" ", poco.text)); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.assumedConstraint != null) + { + foreach (var item in poco.assumedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "assumedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.framedConcern != null) + { + foreach (var item in poco.framedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "framedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.requiredConstraint != null) + { + foreach (var item in poco.requiredConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "requiredConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.requirementDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.requirementDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.requirementDefinition, "requirementDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.stakeholderParameter != null) + { + foreach (var item in poco.stakeholderParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "stakeholderParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/RequirementVerificationMembershipWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/RequirementVerificationMembershipWriter.cs new file mode 100644 index 000000000..39cd2602f --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/RequirementVerificationMembershipWriter.cs @@ -0,0 +1,602 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.Systems.Requirements; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class RequirementVerificationMembershipWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public RequirementVerificationMembershipWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IRequirementVerificationMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:RequirementVerificationMembership"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.Kind != RequirementConstraintKind.Requirement) + { + xmlWriter.WriteAttributeString("kind", poco.Kind.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + xmlWriter.WriteAttributeString("ownedMemberElementId", poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + xmlWriter.WriteAttributeString("ownedMemberName", poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + xmlWriter.WriteAttributeString("ownedMemberShortName", poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedRequirement != null && poco.ownedRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedRequirement", poco.ownedRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.verifiedRequirement != null && poco.verifiedRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("verifiedRequirement", poco.verifiedRequirement.Id.ToString()); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedRequirement, "ownedRequirement", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.verifiedRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.verifiedRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.verifiedRequirement, "verifiedRequirement", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IRequirementVerificationMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:RequirementVerificationMembership"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.Kind != RequirementConstraintKind.Requirement) + { + await xmlWriter.WriteAttributeStringAsync(null, "kind", null, poco.Kind.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberElementId", null, poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberName", null, poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberShortName", null, poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedRequirement != null && poco.ownedRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedRequirement", null, poco.ownedRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.verifiedRequirement != null && poco.verifiedRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "verifiedRequirement", null, poco.verifiedRequirement.Id.ToString()); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedRequirement, "ownedRequirement", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.verifiedRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.verifiedRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.verifiedRequirement, "verifiedRequirement", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ResultExpressionMembershipWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ResultExpressionMembershipWriter.cs new file mode 100644 index 000000000..c546d60f2 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ResultExpressionMembershipWriter.cs @@ -0,0 +1,551 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ResultExpressionMembershipWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ResultExpressionMembershipWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IResultExpressionMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ResultExpressionMembership"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + xmlWriter.WriteAttributeString("ownedMemberElementId", poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + xmlWriter.WriteAttributeString("ownedMemberName", poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + xmlWriter.WriteAttributeString("ownedMemberShortName", poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedResultExpression != null && poco.ownedResultExpression.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedResultExpression", poco.ownedResultExpression.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedResultExpression != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedResultExpression, "ownedResultExpression", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IResultExpressionMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ResultExpressionMembership"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberElementId", null, poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberName", null, poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberShortName", null, poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedResultExpression != null && poco.ownedResultExpression.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedResultExpression", null, poco.ownedResultExpression.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedResultExpression != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedResultExpression, "ownedResultExpression", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ReturnParameterMembershipWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ReturnParameterMembershipWriter.cs new file mode 100644 index 000000000..46dcff0a4 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ReturnParameterMembershipWriter.cs @@ -0,0 +1,552 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ReturnParameterMembershipWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ReturnParameterMembershipWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IReturnParameterMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ReturnParameterMembership"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + xmlWriter.WriteAttributeString("ownedMemberElementId", poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + xmlWriter.WriteAttributeString("ownedMemberName", poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedMemberParameter != null && poco.ownedMemberParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedMemberParameter", poco.ownedMemberParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + xmlWriter.WriteAttributeString("ownedMemberShortName", poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMemberParameter != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedMemberParameter, "ownedMemberParameter", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IReturnParameterMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ReturnParameterMembership"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberElementId", null, poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberName", null, poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedMemberParameter != null && poco.ownedMemberParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberParameter", null, poco.ownedMemberParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberShortName", null, poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMemberParameter != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedMemberParameter, "ownedMemberParameter", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SatisfyRequirementUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SatisfyRequirementUsageWriter.cs new file mode 100644 index 000000000..227ff5474 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SatisfyRequirementUsageWriter.cs @@ -0,0 +1,2789 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class SatisfyRequirementUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public SatisfyRequirementUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ISatisfyRequirementUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:SatisfyRequirementUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsNegated) + { + xmlWriter.WriteAttributeString("isNegated", "true"); + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ReqId)) + { + xmlWriter.WriteAttributeString("reqId", poco.ReqId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.requirementDefinition != null && poco.requirementDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("requirementDefinition", poco.requirementDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.satisfiedRequirement != null && poco.satisfiedRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("satisfiedRequirement", poco.satisfiedRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.satisfyingFeature != null && poco.satisfyingFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("satisfyingFeature", poco.satisfyingFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("subjectParameter", poco.subjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.text != null && poco.text.Count > 0) + { + xmlWriter.WriteAttributeString("text", string.Join(" ", poco.text)); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.assumedConstraint != null) + { + foreach (var item in poco.assumedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "assumedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.framedConcern != null) + { + foreach (var item in poco.framedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "framedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.requiredConstraint != null) + { + foreach (var item in poco.requiredConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "requiredConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.requirementDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.requirementDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.requirementDefinition, "requirementDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.satisfiedRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.satisfiedRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.satisfiedRequirement, "satisfiedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.satisfyingFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.satisfyingFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.satisfyingFeature, "satisfyingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.stakeholderParameter != null) + { + foreach (var item in poco.stakeholderParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "stakeholderParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ISatisfyRequirementUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:SatisfyRequirementUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsNegated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isNegated", null, "true"); + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ReqId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "reqId", null, poco.ReqId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.requirementDefinition != null && poco.requirementDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "requirementDefinition", null, poco.requirementDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.satisfiedRequirement != null && poco.satisfiedRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "satisfiedRequirement", null, poco.satisfiedRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.satisfyingFeature != null && poco.satisfyingFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "satisfyingFeature", null, poco.satisfyingFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "subjectParameter", null, poco.subjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.text != null && poco.text.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "text", null, string.Join(" ", poco.text)); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.assumedConstraint != null) + { + foreach (var item in poco.assumedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "assumedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.framedConcern != null) + { + foreach (var item in poco.framedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "framedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.requiredConstraint != null) + { + foreach (var item in poco.requiredConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "requiredConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.requirementDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.requirementDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.requirementDefinition, "requirementDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.satisfiedRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.satisfiedRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.satisfiedRequirement, "satisfiedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.satisfyingFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.satisfyingFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.satisfyingFeature, "satisfyingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.stakeholderParameter != null) + { + foreach (var item in poco.stakeholderParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "stakeholderParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SelectExpressionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SelectExpressionWriter.cs new file mode 100644 index 000000000..4040d059f --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SelectExpressionWriter.cs @@ -0,0 +1,1743 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Expressions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class SelectExpressionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public SelectExpressionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ISelectExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:SelectExpression"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("function", poco.function.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.instantiatedType != null && poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("instantiatedType", poco.instantiatedType.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (poco.Operator != "select") + { + if (!string.IsNullOrWhiteSpace(poco.Operator)) + { + xmlWriter.WriteAttributeString("operator", poco.Operator); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.argument != null) + { + foreach (var item in poco.argument) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "argument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.instantiatedType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.instantiatedType, "instantiatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ISelectExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:SelectExpression"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "function", null, poco.function.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.instantiatedType != null && poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "instantiatedType", null, poco.instantiatedType.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (poco.Operator != "select") + { + if (!string.IsNullOrWhiteSpace(poco.Operator)) + { + await xmlWriter.WriteAttributeStringAsync(null, "operator", null, poco.Operator); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.argument != null) + { + foreach (var item in poco.argument) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "argument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.instantiatedType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.instantiatedType, "instantiatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SendActionUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SendActionUsageWriter.cs new file mode 100644 index 000000000..a559d810b --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SendActionUsageWriter.cs @@ -0,0 +1,2583 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class SendActionUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public SendActionUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ISendActionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:SendActionUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.payloadArgument != null && poco.payloadArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("payloadArgument", poco.payloadArgument.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.receiverArgument != null && poco.receiverArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("receiverArgument", poco.receiverArgument.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.senderArgument != null && poco.senderArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("senderArgument", poco.senderArgument.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.payloadArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.payloadArgument, "payloadArgument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.receiverArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.receiverArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.receiverArgument, "receiverArgument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.senderArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.senderArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.senderArgument, "senderArgument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ISendActionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:SendActionUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.payloadArgument != null && poco.payloadArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "payloadArgument", null, poco.payloadArgument.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.receiverArgument != null && poco.receiverArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "receiverArgument", null, poco.receiverArgument.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.senderArgument != null && poco.senderArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "senderArgument", null, poco.senderArgument.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.payloadArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.payloadArgument, "payloadArgument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.receiverArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.receiverArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.receiverArgument, "receiverArgument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.senderArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.senderArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.senderArgument, "senderArgument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SpecializationWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SpecializationWriter.cs new file mode 100644 index 000000000..77e8d151e --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SpecializationWriter.cs @@ -0,0 +1,510 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class SpecializationWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public SpecializationWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ISpecialization poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Specialization"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.General != null && poco.General.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("general", poco.General.Id.ToString()); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.Specific != null && poco.Specific.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("specific", poco.Specific.Id.ToString()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.General != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.General.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.General, "general", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.Specific != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.Specific.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.Specific, "specific", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ISpecialization poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Specialization"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.General != null && poco.General.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "general", null, poco.General.Id.ToString()); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.Specific != null && poco.Specific.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "specific", null, poco.Specific.Id.ToString()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.General != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.General.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.General, "general", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.Specific != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.Specific.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.Specific, "specific", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/StakeholderMembershipWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/StakeholderMembershipWriter.cs new file mode 100644 index 000000000..89928330f --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/StakeholderMembershipWriter.cs @@ -0,0 +1,553 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class StakeholderMembershipWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public StakeholderMembershipWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IStakeholderMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:StakeholderMembership"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + xmlWriter.WriteAttributeString("ownedMemberElementId", poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + xmlWriter.WriteAttributeString("ownedMemberName", poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + xmlWriter.WriteAttributeString("ownedMemberShortName", poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedStakeholderParameter != null && poco.ownedStakeholderParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedStakeholderParameter", poco.ownedStakeholderParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedStakeholderParameter != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedStakeholderParameter, "ownedStakeholderParameter", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IStakeholderMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:StakeholderMembership"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberElementId", null, poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberName", null, poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberShortName", null, poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedStakeholderParameter != null && poco.ownedStakeholderParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedStakeholderParameter", null, poco.ownedStakeholderParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedStakeholderParameter != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedStakeholderParameter, "ownedStakeholderParameter", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/StateDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/StateDefinitionWriter.cs new file mode 100644 index 000000000..34bb3a83e --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/StateDefinitionWriter.cs @@ -0,0 +1,2005 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class StateDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public StateDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IStateDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:StateDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.doAction != null && poco.doAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("doAction", poco.doAction.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.entryAction != null && poco.entryAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("entryAction", poco.entryAction.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.exitAction != null && poco.exitAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("exitAction", poco.exitAction.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsParallel) + { + xmlWriter.WriteAttributeString("isParallel", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.action != null) + { + foreach (var item in poco.action) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "action", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.doAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.doAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.doAction, "doAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.entryAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.entryAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.entryAction, "entryAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.exitAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.exitAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.exitAction, "exitAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.state != null) + { + foreach (var item in poco.state) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "state", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IStateDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:StateDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.doAction != null && poco.doAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "doAction", null, poco.doAction.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.entryAction != null && poco.entryAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "entryAction", null, poco.entryAction.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.exitAction != null && poco.exitAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "exitAction", null, poco.exitAction.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsParallel) + { + await xmlWriter.WriteAttributeStringAsync(null, "isParallel", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.action != null) + { + foreach (var item in poco.action) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "action", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.doAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.doAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.doAction, "doAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.entryAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.entryAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.entryAction, "entryAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.exitAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.exitAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.exitAction, "exitAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.state != null) + { + foreach (var item in poco.state) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "state", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/StateSubactionMembershipWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/StateSubactionMembershipWriter.cs new file mode 100644 index 000000000..c29d14092 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/StateSubactionMembershipWriter.cs @@ -0,0 +1,557 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.Systems.States; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class StateSubactionMembershipWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public StateSubactionMembershipWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IStateSubactionMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:StateSubactionMembership"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.action != null && poco.action.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("action", poco.action.Id.ToString()); + } + } + + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + xmlWriter.WriteAttributeString("kind", poco.Kind.ToString().ToLower()); + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + xmlWriter.WriteAttributeString("ownedMemberElementId", poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + xmlWriter.WriteAttributeString("ownedMemberName", poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + xmlWriter.WriteAttributeString("ownedMemberShortName", poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.action != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.action, "action", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IStateSubactionMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:StateSubactionMembership"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.action != null && poco.action.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "action", null, poco.action.Id.ToString()); + } + } + + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + await xmlWriter.WriteAttributeStringAsync(null, "kind", null, poco.Kind.ToString().ToLower()); + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberElementId", null, poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberName", null, poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberShortName", null, poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.action != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.action, "action", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/StateUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/StateUsageWriter.cs new file mode 100644 index 000000000..b3ac380bc --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/StateUsageWriter.cs @@ -0,0 +1,2592 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class StateUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public StateUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IStateUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:StateUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.doAction != null && poco.doAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("doAction", poco.doAction.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.entryAction != null && poco.entryAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("entryAction", poco.entryAction.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.exitAction != null && poco.exitAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("exitAction", poco.exitAction.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsParallel) + { + xmlWriter.WriteAttributeString("isParallel", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.doAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.doAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.doAction, "doAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.entryAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.entryAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.entryAction, "entryAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.exitAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.exitAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.exitAction, "exitAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.stateDefinition != null) + { + foreach (var item in poco.stateDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "stateDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IStateUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:StateUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.doAction != null && poco.doAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "doAction", null, poco.doAction.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.entryAction != null && poco.entryAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "entryAction", null, poco.entryAction.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.exitAction != null && poco.exitAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "exitAction", null, poco.exitAction.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsParallel) + { + await xmlWriter.WriteAttributeStringAsync(null, "isParallel", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.doAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.doAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.doAction, "doAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.entryAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.entryAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.entryAction, "entryAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.exitAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.exitAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.exitAction, "exitAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.stateDefinition != null) + { + foreach (var item in poco.stateDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "stateDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/StepWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/StepWriter.cs new file mode 100644 index 000000000..e74203e90 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/StepWriter.cs @@ -0,0 +1,1595 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class StepWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public StepWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IStep poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Step"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.behavior != null) + { + foreach (var item in poco.behavior) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "behavior", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IStep poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Step"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.behavior != null) + { + foreach (var item in poco.behavior) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "behavior", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/StructureWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/StructureWriter.cs new file mode 100644 index 000000000..c36de1d80 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/StructureWriter.cs @@ -0,0 +1,1092 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Structures; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class StructureWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public StructureWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IStructure poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Structure"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IStructure poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Structure"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SubclassificationWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SubclassificationWriter.cs new file mode 100644 index 000000000..d67b4bdfe --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SubclassificationWriter.cs @@ -0,0 +1,511 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class SubclassificationWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public SubclassificationWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ISubclassification poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Subclassification"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.Subclassifier != null && poco.Subclassifier.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("subclassifier", poco.Subclassifier.Id.ToString()); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.Superclassifier != null && poco.Superclassifier.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("superclassifier", poco.Superclassifier.Id.ToString()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.Subclassifier != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.Subclassifier.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.Subclassifier, "subclassifier", elementOriginMap, currentFileUri); + } + } + + if (poco.Superclassifier != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.Superclassifier.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.Superclassifier, "superclassifier", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ISubclassification poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Subclassification"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.Subclassifier != null && poco.Subclassifier.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "subclassifier", null, poco.Subclassifier.Id.ToString()); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.Superclassifier != null && poco.Superclassifier.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "superclassifier", null, poco.Superclassifier.Id.ToString()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.Subclassifier != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.Subclassifier.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.Subclassifier, "subclassifier", elementOriginMap, currentFileUri); + } + } + + if (poco.Superclassifier != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.Superclassifier.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.Superclassifier, "superclassifier", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SubjectMembershipWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SubjectMembershipWriter.cs new file mode 100644 index 000000000..4a7a56e67 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SubjectMembershipWriter.cs @@ -0,0 +1,553 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class SubjectMembershipWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public SubjectMembershipWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ISubjectMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:SubjectMembership"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + xmlWriter.WriteAttributeString("ownedMemberElementId", poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + xmlWriter.WriteAttributeString("ownedMemberName", poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + xmlWriter.WriteAttributeString("ownedMemberShortName", poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedSubjectParameter != null && poco.ownedSubjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedSubjectParameter", poco.ownedSubjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubjectParameter != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedSubjectParameter, "ownedSubjectParameter", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ISubjectMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:SubjectMembership"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberElementId", null, poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberName", null, poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberShortName", null, poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedSubjectParameter != null && poco.ownedSubjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedSubjectParameter", null, poco.ownedSubjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubjectParameter != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedSubjectParameter, "ownedSubjectParameter", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SubsettingWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SubsettingWriter.cs new file mode 100644 index 000000000..ac745d266 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SubsettingWriter.cs @@ -0,0 +1,511 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class SubsettingWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public SubsettingWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ISubsetting poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Subsetting"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.SubsettedFeature != null && poco.SubsettedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("subsettedFeature", poco.SubsettedFeature.Id.ToString()); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.SubsettingFeature != null && poco.SubsettingFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("subsettingFeature", poco.SubsettingFeature.Id.ToString()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.SubsettedFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.SubsettedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.SubsettedFeature, "subsettedFeature", elementOriginMap, currentFileUri); + } + } + + if (poco.SubsettingFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.SubsettingFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.SubsettingFeature, "subsettingFeature", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ISubsetting poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Subsetting"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.SubsettedFeature != null && poco.SubsettedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "subsettedFeature", null, poco.SubsettedFeature.Id.ToString()); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.SubsettingFeature != null && poco.SubsettingFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "subsettingFeature", null, poco.SubsettingFeature.Id.ToString()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.SubsettedFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.SubsettedFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.SubsettedFeature, "subsettedFeature", elementOriginMap, currentFileUri); + } + } + + if (poco.SubsettingFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.SubsettingFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.SubsettingFeature, "subsettingFeature", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SuccessionAsUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SuccessionAsUsageWriter.cs new file mode 100644 index 000000000..2221fa49c --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SuccessionAsUsageWriter.cs @@ -0,0 +1,2555 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Associations; + using SysML2.NET.Core.POCO.Kernel.Connectors; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class SuccessionAsUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public SuccessionAsUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ISuccessionAsUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:SuccessionAsUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("defaultFeaturingType", poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceFeature", poco.sourceFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.association != null) + { + foreach (var item in poco.association) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "association", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.definition != null) + { + foreach (var item in poco.definition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "definition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ISuccessionAsUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:SuccessionAsUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "defaultFeaturingType", null, poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceFeature", null, poco.sourceFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.association != null) + { + foreach (var item in poco.association) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "association", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.definition != null) + { + foreach (var item in poco.definition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "definition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SuccessionFlowUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SuccessionFlowUsageWriter.cs new file mode 100644 index 000000000..24247196b --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SuccessionFlowUsageWriter.cs @@ -0,0 +1,2797 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Associations; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Connectors; + using SysML2.NET.Core.POCO.Kernel.Interactions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class SuccessionFlowUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public SuccessionFlowUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ISuccessionFlowUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:SuccessionFlowUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("defaultFeaturingType", poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.payloadFeature != null && poco.payloadFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("payloadFeature", poco.payloadFeature.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceFeature", poco.sourceFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceOutputFeature != null && poco.sourceOutputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceOutputFeature", poco.sourceOutputFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.targetInputFeature != null && poco.targetInputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("targetInputFeature", poco.targetInputFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.flowDefinition != null) + { + foreach (var item in poco.flowDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "flowDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.flowEnd != null) + { + foreach (var item in poco.flowEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "flowEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.payloadFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.payloadFeature, "payloadFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadType != null) + { + foreach (var item in poco.payloadType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "payloadType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceOutputFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceOutputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceOutputFeature, "sourceOutputFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetInputFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.targetInputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.targetInputFeature, "targetInputFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ISuccessionFlowUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:SuccessionFlowUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "defaultFeaturingType", null, poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.payloadFeature != null && poco.payloadFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "payloadFeature", null, poco.payloadFeature.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceFeature", null, poco.sourceFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceOutputFeature != null && poco.sourceOutputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceOutputFeature", null, poco.sourceOutputFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.targetInputFeature != null && poco.targetInputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "targetInputFeature", null, poco.targetInputFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.flowDefinition != null) + { + foreach (var item in poco.flowDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "flowDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.flowEnd != null) + { + foreach (var item in poco.flowEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "flowEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.payloadFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.payloadFeature, "payloadFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadType != null) + { + foreach (var item in poco.payloadType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "payloadType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceOutputFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceOutputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceOutputFeature, "sourceOutputFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetInputFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.targetInputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.targetInputFeature, "targetInputFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SuccessionFlowWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SuccessionFlowWriter.cs new file mode 100644 index 000000000..099d50d2c --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SuccessionFlowWriter.cs @@ -0,0 +1,1881 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Associations; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Connectors; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Interactions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class SuccessionFlowWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public SuccessionFlowWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ISuccessionFlow poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:SuccessionFlow"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("defaultFeaturingType", poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.payloadFeature != null && poco.payloadFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("payloadFeature", poco.payloadFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceFeature", poco.sourceFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceOutputFeature != null && poco.sourceOutputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceOutputFeature", poco.sourceOutputFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.targetInputFeature != null && poco.targetInputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("targetInputFeature", poco.targetInputFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.flowEnd != null) + { + foreach (var item in poco.flowEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "flowEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.interaction != null) + { + foreach (var item in poco.interaction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "interaction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.payloadFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.payloadFeature, "payloadFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadType != null) + { + foreach (var item in poco.payloadType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "payloadType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceOutputFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceOutputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceOutputFeature, "sourceOutputFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetInputFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.targetInputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.targetInputFeature, "targetInputFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ISuccessionFlow poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:SuccessionFlow"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "defaultFeaturingType", null, poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.payloadFeature != null && poco.payloadFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "payloadFeature", null, poco.payloadFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceFeature", null, poco.sourceFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceOutputFeature != null && poco.sourceOutputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceOutputFeature", null, poco.sourceOutputFeature.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.targetInputFeature != null && poco.targetInputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "targetInputFeature", null, poco.targetInputFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.flowEnd != null) + { + foreach (var item in poco.flowEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "flowEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.interaction != null) + { + foreach (var item in poco.interaction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "interaction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.payloadFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.payloadFeature, "payloadFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.payloadType != null) + { + foreach (var item in poco.payloadType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "payloadType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceOutputFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceOutputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceOutputFeature, "sourceOutputFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetInputFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.targetInputFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.targetInputFeature, "targetInputFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SuccessionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SuccessionWriter.cs new file mode 100644 index 000000000..b19a76a5a --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/SuccessionWriter.cs @@ -0,0 +1,1720 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Associations; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Kernel.Connectors; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class SuccessionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public SuccessionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ISuccession poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Succession"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("defaultFeaturingType", poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("sourceFeature", poco.sourceFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.association != null) + { + foreach (var item in poco.association) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "association", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ISuccession poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Succession"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.defaultFeaturingType != null && poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "defaultFeaturingType", null, poco.defaultFeaturingType.Id.ToString()); + } + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.sourceFeature != null && poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "sourceFeature", null, poco.sourceFeature.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.association != null) + { + foreach (var item in poco.association) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "association", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.connectorEnd != null) + { + foreach (var item in poco.connectorEnd) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "connectorEnd", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.defaultFeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.defaultFeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.defaultFeaturingType, "defaultFeaturingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedFeature != null) + { + foreach (var item in poco.relatedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.sourceFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.sourceFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.sourceFeature, "sourceFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.targetFeature != null) + { + foreach (var item in poco.targetFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "targetFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/TerminateActionUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/TerminateActionUsageWriter.cs new file mode 100644 index 000000000..2ed2b07c0 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/TerminateActionUsageWriter.cs @@ -0,0 +1,2507 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class TerminateActionUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public TerminateActionUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ITerminateActionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:TerminateActionUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.terminatedOccurrenceArgument != null && poco.terminatedOccurrenceArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("terminatedOccurrenceArgument", poco.terminatedOccurrenceArgument.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.terminatedOccurrenceArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.terminatedOccurrenceArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.terminatedOccurrenceArgument, "terminatedOccurrenceArgument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ITerminateActionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:TerminateActionUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.terminatedOccurrenceArgument != null && poco.terminatedOccurrenceArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "terminatedOccurrenceArgument", null, poco.terminatedOccurrenceArgument.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.terminatedOccurrenceArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.terminatedOccurrenceArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.terminatedOccurrenceArgument, "terminatedOccurrenceArgument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/TextualRepresentationWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/TextualRepresentationWriter.cs new file mode 100644 index 000000000..dac03ae37 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/TextualRepresentationWriter.cs @@ -0,0 +1,511 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class TextualRepresentationWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public TextualRepresentationWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ITextualRepresentation poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:TextualRepresentation"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.Body)) + { + xmlWriter.WriteAttributeString("body", poco.Body); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (!string.IsNullOrWhiteSpace(poco.Language)) + { + xmlWriter.WriteAttributeString("language", poco.Language); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.representedElement != null && poco.representedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("representedElement", poco.representedElement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotation != null) + { + foreach (var item in poco.annotation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "annotation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotatingRelationship != null) + { + foreach (var item in poco.ownedAnnotatingRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotatingRelationship", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.representedElement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.representedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.representedElement, "representedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ITextualRepresentation poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:TextualRepresentation"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.Body)) + { + await xmlWriter.WriteAttributeStringAsync(null, "body", null, poco.Body); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (!string.IsNullOrWhiteSpace(poco.Language)) + { + await xmlWriter.WriteAttributeStringAsync(null, "language", null, poco.Language); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.representedElement != null && poco.representedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "representedElement", null, poco.representedElement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.annotation != null) + { + foreach (var item in poco.annotation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "annotation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotatingRelationship != null) + { + foreach (var item in poco.ownedAnnotatingRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotatingRelationship", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.representedElement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.representedElement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.representedElement, "representedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/TransitionFeatureMembershipWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/TransitionFeatureMembershipWriter.cs new file mode 100644 index 000000000..8b65f658e --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/TransitionFeatureMembershipWriter.cs @@ -0,0 +1,557 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.Systems.States; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class TransitionFeatureMembershipWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public TransitionFeatureMembershipWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ITransitionFeatureMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:TransitionFeatureMembership"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + xmlWriter.WriteAttributeString("kind", poco.Kind.ToString().ToLower()); + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + xmlWriter.WriteAttributeString("ownedMemberElementId", poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + xmlWriter.WriteAttributeString("ownedMemberName", poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + xmlWriter.WriteAttributeString("ownedMemberShortName", poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.transitionFeature != null && poco.transitionFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("transitionFeature", poco.transitionFeature.Id.ToString()); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.transitionFeature != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.transitionFeature, "transitionFeature", writerOptions, elementOriginMap, currentFileUri); + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ITransitionFeatureMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:TransitionFeatureMembership"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + await xmlWriter.WriteAttributeStringAsync(null, "kind", null, poco.Kind.ToString().ToLower()); + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberElementId", null, poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberName", null, poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberShortName", null, poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.transitionFeature != null && poco.transitionFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "transitionFeature", null, poco.transitionFeature.Id.ToString()); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.transitionFeature != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.transitionFeature, "transitionFeature", writerOptions, elementOriginMap, currentFileUri); + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/TransitionUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/TransitionUsageWriter.cs new file mode 100644 index 000000000..54929bc44 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/TransitionUsageWriter.cs @@ -0,0 +1,2650 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Connectors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class TransitionUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public TransitionUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ITransitionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:TransitionUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.source != null && poco.source.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("source", poco.source.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.succession != null && poco.succession.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("succession", poco.succession.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.target != null && poco.target.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("target", poco.target.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.effectAction != null) + { + foreach (var item in poco.effectAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "effectAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.guardExpression != null) + { + foreach (var item in poco.guardExpression) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "guardExpression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.source != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.source.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.source, "source", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.succession != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.succession.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.succession, "succession", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.target != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.target.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.target, "target", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.triggerAction != null) + { + foreach (var item in poco.triggerAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "triggerAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ITransitionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:TransitionUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.source != null && poco.source.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "source", null, poco.source.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.succession != null && poco.succession.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "succession", null, poco.succession.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.target != null && poco.target.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "target", null, poco.target.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.effectAction != null) + { + foreach (var item in poco.effectAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "effectAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.guardExpression != null) + { + foreach (var item in poco.guardExpression) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "guardExpression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.source != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.source.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.source, "source", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.succession != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.succession.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.succession, "succession", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.target != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.target.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.target, "target", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.triggerAction != null) + { + foreach (var item in poco.triggerAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "triggerAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/TriggerInvocationExpressionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/TriggerInvocationExpressionWriter.cs new file mode 100644 index 000000000..3e93e8328 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/TriggerInvocationExpressionWriter.cs @@ -0,0 +1,1733 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Actions; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Expressions; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class TriggerInvocationExpressionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public TriggerInvocationExpressionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ITriggerInvocationExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:TriggerInvocationExpression"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("function", poco.function.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.instantiatedType != null && poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("instantiatedType", poco.instantiatedType.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariable) + { + xmlWriter.WriteAttributeString("isVariable", "true"); + } + + xmlWriter.WriteAttributeString("kind", poco.Kind.ToString().ToLower()); + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.argument != null) + { + foreach (var item in poco.argument) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "argument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.instantiatedType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.instantiatedType, "instantiatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ITriggerInvocationExpression poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:TriggerInvocationExpression"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.function != null && poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "function", null, poco.function.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.instantiatedType != null && poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "instantiatedType", null, poco.instantiatedType.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariable", null, "true"); + } + + await xmlWriter.WriteAttributeStringAsync(null, "kind", null, poco.Kind.ToString().ToLower()); + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.argument != null) + { + foreach (var item in poco.argument) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "argument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.function != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.function.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.function, "function", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.instantiatedType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.instantiatedType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.instantiatedType, "instantiatedType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.type != null) + { + foreach (var item in poco.type) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "type", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/TypeFeaturingWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/TypeFeaturingWriter.cs new file mode 100644 index 000000000..ae34dd44e --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/TypeFeaturingWriter.cs @@ -0,0 +1,511 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class TypeFeaturingWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public TypeFeaturingWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, ITypeFeaturing poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:TypeFeaturing"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.FeatureOfType != null && poco.FeatureOfType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureOfType", poco.FeatureOfType.Id.ToString()); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.FeaturingType != null && poco.FeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featuringType", poco.FeaturingType.Id.ToString()); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.FeatureOfType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.FeatureOfType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.FeatureOfType, "featureOfType", elementOriginMap, currentFileUri); + } + } + + if (poco.FeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.FeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.FeaturingType, "featuringType", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, ITypeFeaturing poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:TypeFeaturing"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.FeatureOfType != null && poco.FeatureOfType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureOfType", null, poco.FeatureOfType.Id.ToString()); + } + + if (writerOptions.WriteIdRefAsAttribute && poco.FeaturingType != null && poco.FeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featuringType", null, poco.FeaturingType.Id.ToString()); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.FeatureOfType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.FeatureOfType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.FeatureOfType, "featureOfType", elementOriginMap, currentFileUri); + } + } + + if (poco.FeaturingType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.FeaturingType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.FeaturingType, "featuringType", elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/TypeWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/TypeWriter.cs new file mode 100644 index 000000000..bb876299b --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/TypeWriter.cs @@ -0,0 +1,1067 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class TypeWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public TypeWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IType poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Type"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IType poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Type"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/UnioningWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/UnioningWriter.cs new file mode 100644 index 000000000..0ca98d31c --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/UnioningWriter.cs @@ -0,0 +1,484 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class UnioningWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public UnioningWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IUnioning poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Unioning"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.UnioningType != null && poco.UnioningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("unioningType", poco.UnioningType.Id.ToString()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.UnioningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.UnioningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.UnioningType, "unioningType", elementOriginMap, currentFileUri); + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IUnioning poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Unioning"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.WriteIdRefAsAttribute && poco.UnioningType != null && poco.UnioningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "unioningType", null, poco.UnioningType.Id.ToString()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (poco.UnioningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.UnioningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.UnioningType, "unioningType", elementOriginMap, currentFileUri); + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/UsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/UsageWriter.cs new file mode 100644 index 000000000..17a62b8b6 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/UsageWriter.cs @@ -0,0 +1,2385 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class UsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public UsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:Usage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.definition != null) + { + foreach (var item in poco.definition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "definition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:Usage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.definition != null) + { + foreach (var item in poco.definition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "definition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/UseCaseDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/UseCaseDefinitionWriter.cs new file mode 100644 index 000000000..0f597762a --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/UseCaseDefinitionWriter.cs @@ -0,0 +1,2078 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class UseCaseDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public UseCaseDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IUseCaseDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:UseCaseDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.objectiveRequirement != null && poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("objectiveRequirement", poco.objectiveRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("subjectParameter", poco.subjectParameter.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.action != null) + { + foreach (var item in poco.action) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "action", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.calculation != null) + { + foreach (var item in poco.calculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "calculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.includedUseCase != null) + { + foreach (var item in poco.includedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "includedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.objectiveRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.objectiveRequirement, "objectiveRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IUseCaseDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:UseCaseDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.objectiveRequirement != null && poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "objectiveRequirement", null, poco.objectiveRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "subjectParameter", null, poco.subjectParameter.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.action != null) + { + foreach (var item in poco.action) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "action", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.calculation != null) + { + foreach (var item in poco.calculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "calculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.includedUseCase != null) + { + foreach (var item in poco.includedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "includedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.objectiveRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.objectiveRequirement, "objectiveRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/UseCaseUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/UseCaseUsageWriter.cs new file mode 100644 index 000000000..12267c7a2 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/UseCaseUsageWriter.cs @@ -0,0 +1,2681 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class UseCaseUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public UseCaseUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IUseCaseUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:UseCaseUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.objectiveRequirement != null && poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("objectiveRequirement", poco.objectiveRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("subjectParameter", poco.subjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.useCaseDefinition != null && poco.useCaseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("useCaseDefinition", poco.useCaseDefinition.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.includedUseCase != null) + { + foreach (var item in poco.includedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "includedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.objectiveRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.objectiveRequirement, "objectiveRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.useCaseDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.useCaseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.useCaseDefinition, "useCaseDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IUseCaseUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:UseCaseUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.objectiveRequirement != null && poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "objectiveRequirement", null, poco.objectiveRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "subjectParameter", null, poco.subjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.useCaseDefinition != null && poco.useCaseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "useCaseDefinition", null, poco.useCaseDefinition.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.includedUseCase != null) + { + foreach (var item in poco.includedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "includedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.objectiveRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.objectiveRequirement, "objectiveRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.useCaseDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.useCaseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.useCaseDefinition, "useCaseDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/VariantMembershipWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/VariantMembershipWriter.cs new file mode 100644 index 000000000..c865c76d0 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/VariantMembershipWriter.cs @@ -0,0 +1,549 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class VariantMembershipWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public VariantMembershipWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IVariantMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:VariantMembership"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + xmlWriter.WriteAttributeString("ownedMemberElementId", poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + xmlWriter.WriteAttributeString("ownedMemberName", poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + xmlWriter.WriteAttributeString("ownedMemberShortName", poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedVariantUsage != null && poco.ownedVariantUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedVariantUsage", poco.ownedVariantUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVariantUsage != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedVariantUsage, "ownedVariantUsage", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IVariantMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:VariantMembership"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberElementId", null, poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberName", null, poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberShortName", null, poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedVariantUsage != null && poco.ownedVariantUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedVariantUsage", null, poco.ownedVariantUsage.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVariantUsage != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedVariantUsage, "ownedVariantUsage", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/VerificationCaseDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/VerificationCaseDefinitionWriter.cs new file mode 100644 index 000000000..f85e0d0e1 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/VerificationCaseDefinitionWriter.cs @@ -0,0 +1,2078 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class VerificationCaseDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public VerificationCaseDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IVerificationCaseDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:VerificationCaseDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.objectiveRequirement != null && poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("objectiveRequirement", poco.objectiveRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("subjectParameter", poco.subjectParameter.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.action != null) + { + foreach (var item in poco.action) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "action", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.calculation != null) + { + foreach (var item in poco.calculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "calculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.objectiveRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.objectiveRequirement, "objectiveRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.verifiedRequirement != null) + { + foreach (var item in poco.verifiedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "verifiedRequirement", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IVerificationCaseDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:VerificationCaseDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.objectiveRequirement != null && poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "objectiveRequirement", null, poco.objectiveRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "subjectParameter", null, poco.subjectParameter.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.action != null) + { + foreach (var item in poco.action) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "action", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.calculation != null) + { + foreach (var item in poco.calculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "calculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.objectiveRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.objectiveRequirement, "objectiveRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.verifiedRequirement != null) + { + foreach (var item in poco.verifiedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "verifiedRequirement", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/VerificationCaseUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/VerificationCaseUsageWriter.cs new file mode 100644 index 000000000..0168cddac --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/VerificationCaseUsageWriter.cs @@ -0,0 +1,2719 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class VerificationCaseUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public VerificationCaseUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IVerificationCaseUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:VerificationCaseUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.caseDefinition != null && poco.caseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("caseDefinition", poco.caseDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.objectiveRequirement != null && poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("objectiveRequirement", poco.objectiveRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("subjectParameter", poco.subjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.verificationCaseDefinition != null && poco.verificationCaseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("verificationCaseDefinition", poco.verificationCaseDefinition.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.caseDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.caseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.caseDefinition, "caseDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.objectiveRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.objectiveRequirement, "objectiveRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.verificationCaseDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.verificationCaseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.verificationCaseDefinition, "verificationCaseDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.verifiedRequirement != null) + { + foreach (var item in poco.verifiedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "verifiedRequirement", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IVerificationCaseUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:VerificationCaseUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.caseDefinition != null && poco.caseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "caseDefinition", null, poco.caseDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.objectiveRequirement != null && poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "objectiveRequirement", null, poco.objectiveRequirement.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "subjectParameter", null, poco.subjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.verificationCaseDefinition != null && poco.verificationCaseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "verificationCaseDefinition", null, poco.verificationCaseDefinition.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.caseDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.caseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.caseDefinition, "caseDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.objectiveRequirement != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.objectiveRequirement.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.objectiveRequirement, "objectiveRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.verificationCaseDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.verificationCaseDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.verificationCaseDefinition, "verificationCaseDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.verifiedRequirement != null) + { + foreach (var item in poco.verifiedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "verifiedRequirement", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ViewDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ViewDefinitionWriter.cs new file mode 100644 index 000000000..5b1dac9fa --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ViewDefinitionWriter.cs @@ -0,0 +1,1919 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ViewDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ViewDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IViewDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ViewDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.viewRendering != null && poco.viewRendering.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("viewRendering", poco.viewRendering.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.satisfiedViewpoint != null) + { + foreach (var item in poco.satisfiedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "satisfiedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.view != null) + { + foreach (var item in poco.view) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "view", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.viewCondition != null) + { + foreach (var item in poco.viewCondition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "viewCondition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.viewRendering != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.viewRendering.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.viewRendering, "viewRendering", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IViewDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ViewDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.viewRendering != null && poco.viewRendering.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "viewRendering", null, poco.viewRendering.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.satisfiedViewpoint != null) + { + foreach (var item in poco.satisfiedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "satisfiedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.view != null) + { + foreach (var item in poco.view) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "view", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.viewCondition != null) + { + foreach (var item in poco.viewCondition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "viewCondition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.viewRendering != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.viewRendering.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.viewRendering, "viewRendering", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ViewRenderingMembershipWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ViewRenderingMembershipWriter.cs new file mode 100644 index 000000000..4004f99a2 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ViewRenderingMembershipWriter.cs @@ -0,0 +1,589 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Root.Namespaces; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ViewRenderingMembershipWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ViewRenderingMembershipWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IViewRenderingMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ViewRenderingMembership"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsImplied) + { + xmlWriter.WriteAttributeString("isImplied", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + xmlWriter.WriteAttributeString("ownedMemberElementId", poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + xmlWriter.WriteAttributeString("ownedMemberName", poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + xmlWriter.WriteAttributeString("ownedMemberShortName", poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedRendering != null && poco.ownedRendering.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedRendering", poco.ownedRendering.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.referencedRendering != null && poco.referencedRendering.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("referencedRendering", poco.referencedRendering.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + xmlWriter.WriteAttributeString("visibility", poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedRendering, "ownedRendering", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.referencedRendering != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.referencedRendering.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.referencedRendering, "referencedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IViewRenderingMembership poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ViewRenderingMembership"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsImplied) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImplied", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberElementId", null, poco.ownedMemberElementId); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberName", null, poco.ownedMemberName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.ownedMemberShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedMemberShortName", null, poco.ownedMemberShortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedRendering != null && poco.ownedRendering.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedRendering", null, poco.ownedRendering.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.referencedRendering != null && poco.referencedRendering.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "referencedRendering", null, poco.referencedRendering.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (poco.Visibility != VisibilityKind.Public) + { + await xmlWriter.WriteAttributeStringAsync(null, "visibility", null, poco.Visibility.ToString().ToLower()); + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (poco.OwnedRelatedElement != null) + { + foreach (var item in poco.OwnedRelatedElement) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelatedElement", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedRendering, "ownedRendering", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.referencedRendering != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.referencedRendering.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.referencedRendering, "referencedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.relatedElement != null) + { + foreach (var item in poco.relatedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "relatedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ViewUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ViewUsageWriter.cs new file mode 100644 index 000000000..041988add --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ViewUsageWriter.cs @@ -0,0 +1,2611 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Kernel.Structures; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ViewUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ViewUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IViewUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ViewUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.viewDefinition != null && poco.viewDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("viewDefinition", poco.viewDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.viewRendering != null && poco.viewRendering.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("viewRendering", poco.viewRendering.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.exposedElement != null) + { + foreach (var item in poco.exposedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "exposedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.itemDefinition != null) + { + foreach (var item in poco.itemDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "itemDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.satisfiedViewpoint != null) + { + foreach (var item in poco.satisfiedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "satisfiedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.viewCondition != null) + { + foreach (var item in poco.viewCondition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "viewCondition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.viewDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.viewDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.viewDefinition, "viewDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.viewRendering != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.viewRendering.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.viewRendering, "viewRendering", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IViewUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ViewUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.viewDefinition != null && poco.viewDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "viewDefinition", null, poco.viewDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.viewRendering != null && poco.viewRendering.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "viewRendering", null, poco.viewRendering.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedFeature != null) + { + foreach (var item in poco.directedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.exposedElement != null) + { + foreach (var item in poco.exposedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "exposedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.itemDefinition != null) + { + foreach (var item in poco.itemDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "itemDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.satisfiedViewpoint != null) + { + foreach (var item in poco.satisfiedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "satisfiedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.viewCondition != null) + { + foreach (var item in poco.viewCondition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "viewCondition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.viewDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.viewDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.viewDefinition, "viewDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.viewRendering != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.viewRendering.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.viewRendering, "viewRendering", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ViewpointDefinitionWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ViewpointDefinitionWriter.cs new file mode 100644 index 000000000..9e6c68ae9 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ViewpointDefinitionWriter.cs @@ -0,0 +1,2100 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ViewpointDefinitionWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ViewpointDefinitionWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IViewpointDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ViewpointDefinition"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ReqId)) + { + xmlWriter.WriteAttributeString("reqId", poco.ReqId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("subjectParameter", poco.subjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.text != null && poco.text.Count > 0) + { + xmlWriter.WriteAttributeString("text", string.Join(" ", poco.text)); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.assumedConstraint != null) + { + foreach (var item in poco.assumedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "assumedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.framedConcern != null) + { + foreach (var item in poco.framedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "framedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.requiredConstraint != null) + { + foreach (var item in poco.requiredConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "requiredConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.stakeholderParameter != null) + { + foreach (var item in poco.stakeholderParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "stakeholderParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.viewpointStakeholder != null) + { + foreach (var item in poco.viewpointStakeholder) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "viewpointStakeholder", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IViewpointDefinition poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ViewpointDefinition"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ReqId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "reqId", null, poco.ReqId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "subjectParameter", null, poco.subjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.text != null && poco.text.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "text", null, string.Join(" ", poco.text)); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.assumedConstraint != null) + { + foreach (var item in poco.assumedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "assumedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.expression != null) + { + foreach (var item in poco.expression) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "expression", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.framedConcern != null) + { + foreach (var item in poco.framedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "framedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAction != null) + { + foreach (var item in poco.ownedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAllocation != null) + { + foreach (var item in poco.ownedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnalysisCase != null) + { + foreach (var item in poco.ownedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAttribute != null) + { + foreach (var item in poco.ownedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCalculation != null) + { + foreach (var item in poco.ownedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCase != null) + { + foreach (var item in poco.ownedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConcern != null) + { + foreach (var item in poco.ownedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConnection != null) + { + foreach (var item in poco.ownedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConstraint != null) + { + foreach (var item in poco.ownedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEnumeration != null) + { + foreach (var item in poco.ownedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFlow != null) + { + foreach (var item in poco.ownedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedInterface != null) + { + foreach (var item in poco.ownedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedItem != null) + { + foreach (var item in poco.ownedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMetadata != null) + { + foreach (var item in poco.ownedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedOccurrence != null) + { + foreach (var item in poco.ownedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPart != null) + { + foreach (var item in poco.ownedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedPort != null) + { + foreach (var item in poco.ownedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReference != null) + { + foreach (var item in poco.ownedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedReference", elementOriginMap, currentFileUri); + } + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRendering != null) + { + foreach (var item in poco.ownedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRequirement != null) + { + foreach (var item in poco.ownedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedState != null) + { + foreach (var item in poco.ownedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubclassification != null) + { + foreach (var item in poco.ownedSubclassification) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubclassification", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTransition != null) + { + foreach (var item in poco.ownedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUsage != null) + { + foreach (var item in poco.ownedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUseCase != null) + { + foreach (var item in poco.ownedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedVerificationCase != null) + { + foreach (var item in poco.ownedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedView != null) + { + foreach (var item in poco.ownedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedViewpoint != null) + { + foreach (var item in poco.ownedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.requiredConstraint != null) + { + foreach (var item in poco.requiredConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "requiredConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.stakeholderParameter != null) + { + foreach (var item in poco.stakeholderParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "stakeholderParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.step != null) + { + foreach (var item in poco.step) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "step", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.viewpointStakeholder != null) + { + foreach (var item in poco.viewpointStakeholder) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "viewpointStakeholder", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ViewpointUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ViewpointUsageWriter.cs new file mode 100644 index 000000000..687d6b159 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/ViewpointUsageWriter.cs @@ -0,0 +1,2725 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class ViewpointUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public ViewpointUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IViewpointUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:ViewpointUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + xmlWriter.WriteAttributeString("isModelLevelEvaluable", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ReqId)) + { + xmlWriter.WriteAttributeString("reqId", poco.ReqId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("result", poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("subjectParameter", poco.subjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.text != null && poco.text.Count > 0) + { + xmlWriter.WriteAttributeString("text", string.Join(" ", poco.text)); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.viewpointDefinition != null && poco.viewpointDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("viewpointDefinition", poco.viewpointDefinition.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.assumedConstraint != null) + { + foreach (var item in poco.assumedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "assumedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.framedConcern != null) + { + foreach (var item in poco.framedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "framedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.requiredConstraint != null) + { + foreach (var item in poco.requiredConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "requiredConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.stakeholderParameter != null) + { + foreach (var item in poco.stakeholderParameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "stakeholderParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.viewpointDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.viewpointDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.viewpointDefinition, "viewpointDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.viewpointStakeholder != null) + { + foreach (var item in poco.viewpointStakeholder) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "viewpointStakeholder", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IViewpointUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:ViewpointUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isModelLevelEvaluable) + { + await xmlWriter.WriteAttributeStringAsync(null, "isModelLevelEvaluable", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (!string.IsNullOrWhiteSpace(poco.ReqId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "reqId", null, poco.ReqId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.result != null && poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "result", null, poco.result.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.subjectParameter != null && poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "subjectParameter", null, poco.subjectParameter.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.text != null && poco.text.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "text", null, string.Join(" ", poco.text)); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.viewpointDefinition != null && poco.viewpointDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "viewpointDefinition", null, poco.viewpointDefinition.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actorParameter != null) + { + foreach (var item in poco.actorParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actorParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.assumedConstraint != null) + { + foreach (var item in poco.assumedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "assumedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.framedConcern != null) + { + foreach (var item in poco.framedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "framedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.requiredConstraint != null) + { + foreach (var item in poco.requiredConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "requiredConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.result != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.result.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.result, "result", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.stakeholderParameter != null) + { + foreach (var item in poco.stakeholderParameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "stakeholderParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.subjectParameter != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.subjectParameter.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.subjectParameter, "subjectParameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.viewpointDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.viewpointDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.viewpointDefinition, "viewpointDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.viewpointStakeholder != null) + { + foreach (var item in poco.viewpointStakeholder) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "viewpointStakeholder", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/WhileLoopActionUsageWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/WhileLoopActionUsageWriter.cs new file mode 100644 index 000000000..fb9cbe184 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/WhileLoopActionUsageWriter.cs @@ -0,0 +1,2583 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + + using SysML2.NET.Common; + using SysML2.NET.Core.Core.Types; + using SysML2.NET.Core.Systems.Occurrences; + using SysML2.NET.Core.POCO.Core.Classifiers; + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Core.POCO.Core.Types; + using SysML2.NET.Core.POCO.Kernel.Behaviors; + using SysML2.NET.Core.POCO.Kernel.Classes; + using SysML2.NET.Core.POCO.Kernel.Functions; + using SysML2.NET.Core.POCO.Root.Annotations; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Core.POCO.Root.Namespaces; + using SysML2.NET.Core.POCO.Systems.Allocations; + using SysML2.NET.Core.POCO.Systems.AnalysisCases; + using SysML2.NET.Core.POCO.Systems.Attributes; + using SysML2.NET.Core.POCO.Systems.Calculations; + using SysML2.NET.Core.POCO.Systems.Cases; + using SysML2.NET.Core.POCO.Systems.Connections; + using SysML2.NET.Core.POCO.Systems.Constraints; + using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; + using SysML2.NET.Core.POCO.Systems.Enumerations; + using SysML2.NET.Core.POCO.Systems.Flows; + using SysML2.NET.Core.POCO.Systems.Interfaces; + using SysML2.NET.Core.POCO.Systems.Items; + using SysML2.NET.Core.POCO.Systems.Metadata; + using SysML2.NET.Core.POCO.Systems.Occurrences; + using SysML2.NET.Core.POCO.Systems.Parts; + using SysML2.NET.Core.POCO.Systems.Ports; + using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Core.POCO.Systems.States; + using SysML2.NET.Core.POCO.Systems.UseCases; + using SysML2.NET.Core.POCO.Systems.VerificationCases; + using SysML2.NET.Core.POCO.Systems.Views; + using SysML2.NET.Core.POCO.Systems.Actions; + using SysML2.NET.Core.POCO.Root.Elements; + using SysML2.NET.Serializer.Xmi.Extensions; + + /// + /// The purpose of the is to write an instance of + /// to the XMI document + /// + public class WhileLoopActionUsageWriter : XmiDataWriter + { + /// + /// The instantiated logger from the injected + /// + private readonly ILogger logger; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + public WhileLoopActionUsageWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) : base(xmiDataWriterFacade, loggerFactory) + { + this.logger = loggerFactory == null ? NullLogger.Instance : loggerFactory.CreateLogger(); + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public override void Write(XmlWriter xmlWriter, IWhileLoopActionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xsi", "type", null, "sysml:WhileLoopActionUsage"); + xmlWriter.WriteAttributeString("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + xmlWriter.WriteAttributeString("aliasIds", string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.bodyAction != null && poco.bodyAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("bodyAction", poco.bodyAction.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("crossFeature", poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + xmlWriter.WriteAttributeString("declaredName", poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + xmlWriter.WriteAttributeString("declaredShortName", poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + xmlWriter.WriteAttributeString("direction", poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + xmlWriter.WriteAttributeString("elementId", poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("endOwningType", poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("featureTarget", poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("individualDefinition", poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + xmlWriter.WriteAttributeString("isAbstract", "true"); + } + + if (poco.IsComposite) + { + xmlWriter.WriteAttributeString("isComposite", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + xmlWriter.WriteAttributeString("isConjugated", "true"); + } + } + + if (poco.IsConstant) + { + xmlWriter.WriteAttributeString("isConstant", "true"); + } + + if (poco.IsDerived) + { + xmlWriter.WriteAttributeString("isDerived", "true"); + } + + if (poco.IsEnd) + { + xmlWriter.WriteAttributeString("isEnd", "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + xmlWriter.WriteAttributeString("isImpliedIncluded", "true"); + } + + if (poco.IsIndividual) + { + xmlWriter.WriteAttributeString("isIndividual", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + xmlWriter.WriteAttributeString("isLibraryElement", "true"); + } + } + + if (poco.IsOrdered) + { + xmlWriter.WriteAttributeString("isOrdered", "true"); + } + + if (poco.IsPortion) + { + xmlWriter.WriteAttributeString("isPortion", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + xmlWriter.WriteAttributeString("isReference", "true"); + } + } + + if (poco.IsSufficient) + { + xmlWriter.WriteAttributeString("isSufficient", "true"); + } + + if (!poco.IsUnique) + { + xmlWriter.WriteAttributeString("isUnique", "false"); + } + + if (poco.IsVariation) + { + xmlWriter.WriteAttributeString("isVariation", "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + xmlWriter.WriteAttributeString("mayTimeVary", "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("multiplicity", poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + xmlWriter.WriteAttributeString("name", poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedConjugator", poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedCrossSubsetting", poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("ownedReferenceSubsetting", poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owner", poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningDefinition", poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningNamespace", poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningType", poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("owningUsage", poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + xmlWriter.WriteAttributeString("portionKind", poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + xmlWriter.WriteAttributeString("qualifiedName", poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + xmlWriter.WriteAttributeString("shortName", poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.untilArgument != null && poco.untilArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("untilArgument", poco.untilArgument.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.whileArgument != null && poco.whileArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + xmlWriter.WriteAttributeString("whileArgument", poco.whileArgument.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.bodyAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.bodyAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.bodyAction, "bodyAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.untilArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.untilArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.untilArgument, "untilArgument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + this.XmiDataWriterFacade.WriteContainedElement(xmlWriter, (IData)item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.whileArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.whileArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + this.XmiDataWriterFacade.WriteReferenceElement(xmlWriter, (IData)poco.whileArgument, "whileArgument", elementOriginMap, currentFileUri); + } + } + } + + + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public override async Task WriteAsync(XmlWriter xmlWriter, IWhileLoopActionUsage poco, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, "sysml:WhileLoopActionUsage"); + await xmlWriter.WriteAttributeStringAsync("xmi", "id", null, poco.Id.ToString()); + + // Scalar properties as XML attributes (sorted alphabetically) + if (poco.AliasIds != null && poco.AliasIds.Count > 0) + { + await xmlWriter.WriteAttributeStringAsync(null, "aliasIds", null, string.Join(" ", poco.AliasIds)); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.bodyAction != null && poco.bodyAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "bodyAction", null, poco.bodyAction.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.crossFeature != null && poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "crossFeature", null, poco.crossFeature.Id.ToString()); + } + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredName", null, poco.DeclaredName); + } + + if (!string.IsNullOrWhiteSpace(poco.DeclaredShortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "declaredShortName", null, poco.DeclaredShortName); + } + + if (poco.Direction.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "direction", null, poco.Direction.Value.ToString().ToLower()); + } + + if (!string.IsNullOrWhiteSpace(poco.ElementId)) + { + await xmlWriter.WriteAttributeStringAsync(null, "elementId", null, poco.ElementId); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.endOwningType != null && poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "endOwningType", null, poco.endOwningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.featureTarget != null && poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "featureTarget", null, poco.featureTarget.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.individualDefinition != null && poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "individualDefinition", null, poco.individualDefinition.Id.ToString()); + } + } + + if (poco.IsAbstract) + { + await xmlWriter.WriteAttributeStringAsync(null, "isAbstract", null, "true"); + } + + if (poco.IsComposite) + { + await xmlWriter.WriteAttributeStringAsync(null, "isComposite", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isConjugated) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConjugated", null, "true"); + } + } + + if (poco.IsConstant) + { + await xmlWriter.WriteAttributeStringAsync(null, "isConstant", null, "true"); + } + + if (poco.IsDerived) + { + await xmlWriter.WriteAttributeStringAsync(null, "isDerived", null, "true"); + } + + if (poco.IsEnd) + { + await xmlWriter.WriteAttributeStringAsync(null, "isEnd", null, "true"); + } + + if (writerOptions.IncludeImplied || poco.IsImpliedIncluded) + { + await xmlWriter.WriteAttributeStringAsync(null, "isImpliedIncluded", null, "true"); + } + + if (poco.IsIndividual) + { + await xmlWriter.WriteAttributeStringAsync(null, "isIndividual", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isLibraryElement) + { + await xmlWriter.WriteAttributeStringAsync(null, "isLibraryElement", null, "true"); + } + } + + if (poco.IsOrdered) + { + await xmlWriter.WriteAttributeStringAsync(null, "isOrdered", null, "true"); + } + + if (poco.IsPortion) + { + await xmlWriter.WriteAttributeStringAsync(null, "isPortion", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.isReference) + { + await xmlWriter.WriteAttributeStringAsync(null, "isReference", null, "true"); + } + } + + if (poco.IsSufficient) + { + await xmlWriter.WriteAttributeStringAsync(null, "isSufficient", null, "true"); + } + + if (!poco.IsUnique) + { + await xmlWriter.WriteAttributeStringAsync(null, "isUnique", null, "false"); + } + + if (poco.IsVariation) + { + await xmlWriter.WriteAttributeStringAsync(null, "isVariation", null, "true"); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.mayTimeVary) + { + await xmlWriter.WriteAttributeStringAsync(null, "mayTimeVary", null, "true"); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.multiplicity != null && poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "multiplicity", null, poco.multiplicity.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.name)) + { + await xmlWriter.WriteAttributeStringAsync(null, "name", null, poco.name); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedConjugator != null && poco.ownedConjugator.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedConjugator", null, poco.ownedConjugator.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedCrossSubsetting != null && poco.ownedCrossSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedCrossSubsetting", null, poco.ownedCrossSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.ownedReferenceSubsetting != null && poco.ownedReferenceSubsetting.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "ownedReferenceSubsetting", null, poco.ownedReferenceSubsetting.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owner != null && poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owner", null, poco.owner.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningDefinition != null && poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningDefinition", null, poco.owningDefinition.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningNamespace != null && poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningNamespace", null, poco.owningNamespace.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningType != null && poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningType", null, poco.owningType.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.owningUsage != null && poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "owningUsage", null, poco.owningUsage.Id.ToString()); + } + } + + if (poco.PortionKind.HasValue) + { + await xmlWriter.WriteAttributeStringAsync(null, "portionKind", null, poco.PortionKind.Value.ToString().ToLower()); + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.qualifiedName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "qualifiedName", null, poco.qualifiedName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (!string.IsNullOrWhiteSpace(poco.shortName)) + { + await xmlWriter.WriteAttributeStringAsync(null, "shortName", null, poco.shortName); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.untilArgument != null && poco.untilArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "untilArgument", null, poco.untilArgument.Id.ToString()); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (writerOptions.WriteIdRefAsAttribute && poco.whileArgument != null && poco.whileArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await xmlWriter.WriteAttributeStringAsync(null, "whileArgument", null, poco.whileArgument.Id.ToString()); + } + } + + + // Reference/containment properties as child elements (sorted alphabetically) + if (writerOptions.IncludeDerivedProperties) + { + if (poco.actionDefinition != null) + { + foreach (var item in poco.actionDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "actionDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.bodyAction != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.bodyAction.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.bodyAction, "bodyAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.chainingFeature != null) + { + foreach (var item in poco.chainingFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "chainingFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.crossFeature != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.crossFeature.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.crossFeature, "crossFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.differencingType != null) + { + foreach (var item in poco.differencingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "differencingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.directedUsage != null) + { + foreach (var item in poco.directedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "directedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.documentation != null) + { + foreach (var item in poco.documentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "documentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endFeature != null) + { + foreach (var item in poco.endFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "endFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.endOwningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.endOwningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.endOwningType, "endOwningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.feature != null) + { + foreach (var item in poco.feature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "feature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureMembership != null) + { + foreach (var item in poco.featureMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featureMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featureTarget != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.featureTarget.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.featureTarget, "featureTarget", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.featuringType != null) + { + foreach (var item in poco.featuringType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "featuringType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.importedMembership != null) + { + foreach (var item in poco.importedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "importedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.individualDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.individualDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.individualDefinition, "individualDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedFeature != null) + { + foreach (var item in poco.inheritedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.inheritedMembership != null) + { + foreach (var item in poco.inheritedMembership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "inheritedMembership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.input != null) + { + foreach (var item in poco.input) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "input", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.intersectingType != null) + { + foreach (var item in poco.intersectingType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "intersectingType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.member != null) + { + foreach (var item in poco.member) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "member", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.membership != null) + { + foreach (var item in poco.membership) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "membership", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.multiplicity != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.multiplicity.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.multiplicity, "multiplicity", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAction != null) + { + foreach (var item in poco.nestedAction) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAction", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAllocation != null) + { + foreach (var item in poco.nestedAllocation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAllocation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAnalysisCase != null) + { + foreach (var item in poco.nestedAnalysisCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAnalysisCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedAttribute != null) + { + foreach (var item in poco.nestedAttribute) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedAttribute", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCalculation != null) + { + foreach (var item in poco.nestedCalculation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCalculation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedCase != null) + { + foreach (var item in poco.nestedCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConcern != null) + { + foreach (var item in poco.nestedConcern) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConcern", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConnection != null) + { + foreach (var item in poco.nestedConnection) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConnection", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedConstraint != null) + { + foreach (var item in poco.nestedConstraint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedConstraint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedEnumeration != null) + { + foreach (var item in poco.nestedEnumeration) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedEnumeration", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedFlow != null) + { + foreach (var item in poco.nestedFlow) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedFlow", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedInterface != null) + { + foreach (var item in poco.nestedInterface) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedInterface", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedItem != null) + { + foreach (var item in poco.nestedItem) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedItem", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedMetadata != null) + { + foreach (var item in poco.nestedMetadata) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedMetadata", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedOccurrence != null) + { + foreach (var item in poco.nestedOccurrence) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedOccurrence", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPart != null) + { + foreach (var item in poco.nestedPart) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPart", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedPort != null) + { + foreach (var item in poco.nestedPort) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedPort", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedReference != null) + { + foreach (var item in poco.nestedReference) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedReference", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRendering != null) + { + foreach (var item in poco.nestedRendering) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRendering", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedRequirement != null) + { + foreach (var item in poco.nestedRequirement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedRequirement", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedState != null) + { + foreach (var item in poco.nestedState) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedState", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedTransition != null) + { + foreach (var item in poco.nestedTransition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedTransition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUsage != null) + { + foreach (var item in poco.nestedUsage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedUseCase != null) + { + foreach (var item in poco.nestedUseCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedUseCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedVerificationCase != null) + { + foreach (var item in poco.nestedVerificationCase) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedVerificationCase", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedView != null) + { + foreach (var item in poco.nestedView) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedView", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.nestedViewpoint != null) + { + foreach (var item in poco.nestedViewpoint) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "nestedViewpoint", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.occurrenceDefinition != null) + { + foreach (var item in poco.occurrenceDefinition) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "occurrenceDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.output != null) + { + foreach (var item in poco.output) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "output", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedAnnotation != null) + { + foreach (var item in poco.ownedAnnotation) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedAnnotation", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedConjugator != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedConjugator, "ownedConjugator", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedCrossSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedCrossSubsetting, "ownedCrossSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDifferencing != null) + { + foreach (var item in poco.ownedDifferencing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDifferencing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedDisjoining != null) + { + foreach (var item in poco.ownedDisjoining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedDisjoining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedElement != null) + { + foreach (var item in poco.ownedElement) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedElement", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedEndFeature != null) + { + foreach (var item in poco.ownedEndFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedEndFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeature != null) + { + foreach (var item in poco.ownedFeature) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedFeature", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureChaining != null) + { + foreach (var item in poco.ownedFeatureChaining) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureChaining", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureInverting != null) + { + foreach (var item in poco.ownedFeatureInverting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureInverting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedFeatureMembership != null) + { + foreach (var item in poco.ownedFeatureMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedFeatureMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedImport != null) + { + foreach (var item in poco.ownedImport) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedImport", writerOptions, elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedIntersecting != null) + { + foreach (var item in poco.ownedIntersecting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedIntersecting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMember != null) + { + foreach (var item in poco.ownedMember) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "ownedMember", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedMembership != null) + { + foreach (var item in poco.ownedMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedRedefinition != null) + { + foreach (var item in poco.ownedRedefinition) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRedefinition", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedReferenceSubsetting != null) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, poco.ownedReferenceSubsetting, "ownedReferenceSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + + if (poco.OwnedRelationship != null) + { + foreach (var item in poco.OwnedRelationship) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedRelationship", writerOptions, elementOriginMap, currentFileUri, true); + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSpecialization != null) + { + foreach (var item in poco.ownedSpecialization) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSpecialization", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedSubsetting != null) + { + foreach (var item in poco.ownedSubsetting) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedSubsetting", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTypeFeaturing != null) + { + foreach (var item in poco.ownedTypeFeaturing) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTypeFeaturing", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedTyping != null) + { + foreach (var item in poco.ownedTyping) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedTyping", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.ownedUnioning != null) + { + foreach (var item in poco.ownedUnioning) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "ownedUnioning", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owner != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owner.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owner, "owner", elementOriginMap, currentFileUri, true); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningDefinition != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningDefinition.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningDefinition, "owningDefinition", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningNamespace != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningNamespace.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningNamespace, "owningNamespace", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningType != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningType.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningType, "owningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.owningUsage != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.owningUsage.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.owningUsage, "owningUsage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.parameter != null) + { + foreach (var item in poco.parameter) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "parameter", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.textualRepresentation != null) + { + foreach (var item in poco.textualRepresentation) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "textualRepresentation", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.unioningType != null) + { + foreach (var item in poco.unioningType) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "unioningType", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.untilArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.untilArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.untilArgument, "untilArgument", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.usage != null) + { + foreach (var item in poco.usage) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "usage", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variant != null) + { + foreach (var item in poco.variant) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, item, "variant", elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.variantMembership != null) + { + foreach (var item in poco.variantMembership) + { + await this.XmiDataWriterFacade.WriteContainedElementAsync(xmlWriter, item, "variantMembership", writerOptions, elementOriginMap, currentFileUri); + } + } + } + + if (writerOptions.IncludeDerivedProperties) + { + if (poco.whileArgument != null) + { + if (!writerOptions.WriteIdRefAsAttribute || !poco.whileArgument.QueryIsValidIdRef(elementOriginMap, currentFileUri)) + { + await this.XmiDataWriterFacade.WriteReferenceElementAsync(xmlWriter, poco.whileArgument, "whileArgument", elementOriginMap, currentFileUri); + } + } + } + + + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/XmiDataWriterFacade.cs b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/XmiDataWriterFacade.cs new file mode 100644 index 000000000..68fc0e8db --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/AutoGenWriters/XmiDataWriterFacade.cs @@ -0,0 +1,1949 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Collections.Generic; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + + using SysML2.NET.Common; + using SysML2.NET.Core.POCO.Root.Elements; + + /// + /// The purpose of the is to dispatch writing of instances + /// to the appropriate per-type writer class + /// + public class XmiDataWriterFacade : IXmiDataWriterFacade + { + /// + /// The used to set up logging for writer instances + /// + private readonly ILoggerFactory loggerFactory; + + /// + /// A dictionary that contains actions that write based on a key that represents the POCO type name + /// + private readonly Dictionary> writerCache; + + /// + /// A dictionary that contains functions that asynchronously write based on a key that represents the POCO type name + /// + private readonly Dictionary> writerAsyncCache; + + /// + /// Initializes a new instance of the + /// + /// The used to set up logging + public XmiDataWriterFacade(ILoggerFactory loggerFactory) + { + this.loggerFactory = loggerFactory; + + this.writerCache = new Dictionary> + { + ["AcceptActionUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AcceptActionUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Actions.IAcceptActionUsage)data, elementName, writerOptions, originMap, uri); + }, + ["ActionDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ActionDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Actions.IActionDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["ActionUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ActionUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Actions.IActionUsage)data, elementName, writerOptions, originMap, uri); + }, + ["ActorMembership"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ActorMembershipWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Requirements.IActorMembership)data, elementName, writerOptions, originMap, uri); + }, + ["AllocationDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AllocationDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Allocations.IAllocationDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["AllocationUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AllocationUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Allocations.IAllocationUsage)data, elementName, writerOptions, originMap, uri); + }, + ["AnalysisCaseDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AnalysisCaseDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.AnalysisCases.IAnalysisCaseDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["AnalysisCaseUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AnalysisCaseUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.AnalysisCases.IAnalysisCaseUsage)data, elementName, writerOptions, originMap, uri); + }, + ["AnnotatingElement"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AnnotatingElementWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Root.Annotations.IAnnotatingElement)data, elementName, writerOptions, originMap, uri); + }, + ["Annotation"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AnnotationWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Root.Annotations.IAnnotation)data, elementName, writerOptions, originMap, uri); + }, + ["AssertConstraintUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AssertConstraintUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Constraints.IAssertConstraintUsage)data, elementName, writerOptions, originMap, uri); + }, + ["AssignmentActionUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AssignmentActionUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Actions.IAssignmentActionUsage)data, elementName, writerOptions, originMap, uri); + }, + ["Association"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AssociationWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Associations.IAssociation)data, elementName, writerOptions, originMap, uri); + }, + ["AssociationStructure"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AssociationStructureWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Associations.IAssociationStructure)data, elementName, writerOptions, originMap, uri); + }, + ["AttributeDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AttributeDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Attributes.IAttributeDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["AttributeUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AttributeUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Attributes.IAttributeUsage)data, elementName, writerOptions, originMap, uri); + }, + ["Behavior"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new BehaviorWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Behaviors.IBehavior)data, elementName, writerOptions, originMap, uri); + }, + ["BindingConnector"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new BindingConnectorWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Connectors.IBindingConnector)data, elementName, writerOptions, originMap, uri); + }, + ["BindingConnectorAsUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new BindingConnectorAsUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Connections.IBindingConnectorAsUsage)data, elementName, writerOptions, originMap, uri); + }, + ["BooleanExpression"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new BooleanExpressionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Functions.IBooleanExpression)data, elementName, writerOptions, originMap, uri); + }, + ["CalculationDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new CalculationDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Calculations.ICalculationDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["CalculationUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new CalculationUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Calculations.ICalculationUsage)data, elementName, writerOptions, originMap, uri); + }, + ["CaseDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new CaseDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Cases.ICaseDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["CaseUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new CaseUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Cases.ICaseUsage)data, elementName, writerOptions, originMap, uri); + }, + ["Class"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ClassWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Classes.IClass)data, elementName, writerOptions, originMap, uri); + }, + ["Classifier"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ClassifierWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Core.Classifiers.IClassifier)data, elementName, writerOptions, originMap, uri); + }, + ["CollectExpression"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new CollectExpressionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Expressions.ICollectExpression)data, elementName, writerOptions, originMap, uri); + }, + ["Comment"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new CommentWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Root.Annotations.IComment)data, elementName, writerOptions, originMap, uri); + }, + ["ConcernDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConcernDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Requirements.IConcernDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["ConcernUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConcernUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Requirements.IConcernUsage)data, elementName, writerOptions, originMap, uri); + }, + ["ConjugatedPortDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConjugatedPortDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Ports.IConjugatedPortDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["ConjugatedPortTyping"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConjugatedPortTypingWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Ports.IConjugatedPortTyping)data, elementName, writerOptions, originMap, uri); + }, + ["Conjugation"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConjugationWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Core.Types.IConjugation)data, elementName, writerOptions, originMap, uri); + }, + ["ConnectionDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConnectionDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Connections.IConnectionDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["ConnectionUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConnectionUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Connections.IConnectionUsage)data, elementName, writerOptions, originMap, uri); + }, + ["Connector"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConnectorWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Connectors.IConnector)data, elementName, writerOptions, originMap, uri); + }, + ["ConstraintDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConstraintDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Constraints.IConstraintDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["ConstraintUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConstraintUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Constraints.IConstraintUsage)data, elementName, writerOptions, originMap, uri); + }, + ["ConstructorExpression"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConstructorExpressionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Expressions.IConstructorExpression)data, elementName, writerOptions, originMap, uri); + }, + ["CrossSubsetting"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new CrossSubsettingWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Core.Features.ICrossSubsetting)data, elementName, writerOptions, originMap, uri); + }, + ["DataType"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new DataTypeWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.DataTypes.IDataType)data, elementName, writerOptions, originMap, uri); + }, + ["DecisionNode"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new DecisionNodeWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Actions.IDecisionNode)data, elementName, writerOptions, originMap, uri); + }, + ["Definition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new DefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.DefinitionAndUsage.IDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["Dependency"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new DependencyWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Root.Dependencies.IDependency)data, elementName, writerOptions, originMap, uri); + }, + ["Differencing"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new DifferencingWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Core.Types.IDifferencing)data, elementName, writerOptions, originMap, uri); + }, + ["Disjoining"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new DisjoiningWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Core.Types.IDisjoining)data, elementName, writerOptions, originMap, uri); + }, + ["Documentation"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new DocumentationWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Root.Annotations.IDocumentation)data, elementName, writerOptions, originMap, uri); + }, + ["ElementFilterMembership"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ElementFilterMembershipWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Packages.IElementFilterMembership)data, elementName, writerOptions, originMap, uri); + }, + ["EndFeatureMembership"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new EndFeatureMembershipWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Core.Features.IEndFeatureMembership)data, elementName, writerOptions, originMap, uri); + }, + ["EnumerationDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new EnumerationDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Enumerations.IEnumerationDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["EnumerationUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new EnumerationUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Enumerations.IEnumerationUsage)data, elementName, writerOptions, originMap, uri); + }, + ["EventOccurrenceUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new EventOccurrenceUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Occurrences.IEventOccurrenceUsage)data, elementName, writerOptions, originMap, uri); + }, + ["ExhibitStateUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ExhibitStateUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.States.IExhibitStateUsage)data, elementName, writerOptions, originMap, uri); + }, + ["Expression"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ExpressionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Functions.IExpression)data, elementName, writerOptions, originMap, uri); + }, + ["Feature"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FeatureWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Core.Features.IFeature)data, elementName, writerOptions, originMap, uri); + }, + ["FeatureChainExpression"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FeatureChainExpressionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Expressions.IFeatureChainExpression)data, elementName, writerOptions, originMap, uri); + }, + ["FeatureChaining"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FeatureChainingWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Core.Features.IFeatureChaining)data, elementName, writerOptions, originMap, uri); + }, + ["FeatureInverting"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FeatureInvertingWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Core.Features.IFeatureInverting)data, elementName, writerOptions, originMap, uri); + }, + ["FeatureMembership"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FeatureMembershipWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Core.Types.IFeatureMembership)data, elementName, writerOptions, originMap, uri); + }, + ["FeatureReferenceExpression"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FeatureReferenceExpressionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Expressions.IFeatureReferenceExpression)data, elementName, writerOptions, originMap, uri); + }, + ["FeatureTyping"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FeatureTypingWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Core.Features.IFeatureTyping)data, elementName, writerOptions, originMap, uri); + }, + ["FeatureValue"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FeatureValueWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.FeatureValues.IFeatureValue)data, elementName, writerOptions, originMap, uri); + }, + ["Flow"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FlowWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Interactions.IFlow)data, elementName, writerOptions, originMap, uri); + }, + ["FlowDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FlowDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Flows.IFlowDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["FlowEnd"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FlowEndWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Interactions.IFlowEnd)data, elementName, writerOptions, originMap, uri); + }, + ["FlowUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FlowUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Flows.IFlowUsage)data, elementName, writerOptions, originMap, uri); + }, + ["ForkNode"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ForkNodeWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Actions.IForkNode)data, elementName, writerOptions, originMap, uri); + }, + ["ForLoopActionUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ForLoopActionUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Actions.IForLoopActionUsage)data, elementName, writerOptions, originMap, uri); + }, + ["FramedConcernMembership"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FramedConcernMembershipWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Requirements.IFramedConcernMembership)data, elementName, writerOptions, originMap, uri); + }, + ["Function"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FunctionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Functions.IFunction)data, elementName, writerOptions, originMap, uri); + }, + ["IfActionUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new IfActionUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Actions.IIfActionUsage)data, elementName, writerOptions, originMap, uri); + }, + ["IncludeUseCaseUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new IncludeUseCaseUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.UseCases.IIncludeUseCaseUsage)data, elementName, writerOptions, originMap, uri); + }, + ["IndexExpression"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new IndexExpressionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Expressions.IIndexExpression)data, elementName, writerOptions, originMap, uri); + }, + ["Interaction"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new InteractionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Interactions.IInteraction)data, elementName, writerOptions, originMap, uri); + }, + ["InterfaceDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new InterfaceDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Interfaces.IInterfaceDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["InterfaceUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new InterfaceUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Interfaces.IInterfaceUsage)data, elementName, writerOptions, originMap, uri); + }, + ["Intersecting"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new IntersectingWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Core.Types.IIntersecting)data, elementName, writerOptions, originMap, uri); + }, + ["Invariant"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new InvariantWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Functions.IInvariant)data, elementName, writerOptions, originMap, uri); + }, + ["InvocationExpression"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new InvocationExpressionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Expressions.IInvocationExpression)data, elementName, writerOptions, originMap, uri); + }, + ["ItemDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ItemDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Items.IItemDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["ItemUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ItemUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Items.IItemUsage)data, elementName, writerOptions, originMap, uri); + }, + ["JoinNode"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new JoinNodeWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Actions.IJoinNode)data, elementName, writerOptions, originMap, uri); + }, + ["LibraryPackage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new LibraryPackageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Packages.ILibraryPackage)data, elementName, writerOptions, originMap, uri); + }, + ["LiteralBoolean"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new LiteralBooleanWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Expressions.ILiteralBoolean)data, elementName, writerOptions, originMap, uri); + }, + ["LiteralExpression"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new LiteralExpressionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Expressions.ILiteralExpression)data, elementName, writerOptions, originMap, uri); + }, + ["LiteralInfinity"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new LiteralInfinityWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Expressions.ILiteralInfinity)data, elementName, writerOptions, originMap, uri); + }, + ["LiteralInteger"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new LiteralIntegerWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Expressions.ILiteralInteger)data, elementName, writerOptions, originMap, uri); + }, + ["LiteralRational"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new LiteralRationalWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Expressions.ILiteralRational)data, elementName, writerOptions, originMap, uri); + }, + ["LiteralString"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new LiteralStringWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Expressions.ILiteralString)data, elementName, writerOptions, originMap, uri); + }, + ["Membership"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MembershipWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Root.Namespaces.IMembership)data, elementName, writerOptions, originMap, uri); + }, + ["MembershipExpose"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MembershipExposeWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Views.IMembershipExpose)data, elementName, writerOptions, originMap, uri); + }, + ["MembershipImport"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MembershipImportWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Root.Namespaces.IMembershipImport)data, elementName, writerOptions, originMap, uri); + }, + ["MergeNode"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MergeNodeWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Actions.IMergeNode)data, elementName, writerOptions, originMap, uri); + }, + ["Metaclass"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MetaclassWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Metadata.IMetaclass)data, elementName, writerOptions, originMap, uri); + }, + ["MetadataAccessExpression"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MetadataAccessExpressionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Expressions.IMetadataAccessExpression)data, elementName, writerOptions, originMap, uri); + }, + ["MetadataDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MetadataDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Metadata.IMetadataDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["MetadataFeature"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MetadataFeatureWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Metadata.IMetadataFeature)data, elementName, writerOptions, originMap, uri); + }, + ["MetadataUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MetadataUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Metadata.IMetadataUsage)data, elementName, writerOptions, originMap, uri); + }, + ["Multiplicity"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MultiplicityWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Core.Types.IMultiplicity)data, elementName, writerOptions, originMap, uri); + }, + ["MultiplicityRange"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MultiplicityRangeWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Multiplicities.IMultiplicityRange)data, elementName, writerOptions, originMap, uri); + }, + ["Namespace"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new NamespaceWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Root.Namespaces.INamespace)data, elementName, writerOptions, originMap, uri); + }, + ["NamespaceExpose"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new NamespaceExposeWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Views.INamespaceExpose)data, elementName, writerOptions, originMap, uri); + }, + ["NamespaceImport"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new NamespaceImportWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Root.Namespaces.INamespaceImport)data, elementName, writerOptions, originMap, uri); + }, + ["NullExpression"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new NullExpressionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Expressions.INullExpression)data, elementName, writerOptions, originMap, uri); + }, + ["ObjectiveMembership"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ObjectiveMembershipWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Cases.IObjectiveMembership)data, elementName, writerOptions, originMap, uri); + }, + ["OccurrenceDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new OccurrenceDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Occurrences.IOccurrenceDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["OccurrenceUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new OccurrenceUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Occurrences.IOccurrenceUsage)data, elementName, writerOptions, originMap, uri); + }, + ["OperatorExpression"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new OperatorExpressionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Expressions.IOperatorExpression)data, elementName, writerOptions, originMap, uri); + }, + ["OwningMembership"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new OwningMembershipWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Root.Namespaces.IOwningMembership)data, elementName, writerOptions, originMap, uri); + }, + ["Package"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new PackageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Packages.IPackage)data, elementName, writerOptions, originMap, uri); + }, + ["ParameterMembership"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ParameterMembershipWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Behaviors.IParameterMembership)data, elementName, writerOptions, originMap, uri); + }, + ["PartDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new PartDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Parts.IPartDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["PartUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new PartUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Parts.IPartUsage)data, elementName, writerOptions, originMap, uri); + }, + ["PayloadFeature"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new PayloadFeatureWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Interactions.IPayloadFeature)data, elementName, writerOptions, originMap, uri); + }, + ["PerformActionUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new PerformActionUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Actions.IPerformActionUsage)data, elementName, writerOptions, originMap, uri); + }, + ["PortConjugation"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new PortConjugationWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Ports.IPortConjugation)data, elementName, writerOptions, originMap, uri); + }, + ["PortDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new PortDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Ports.IPortDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["PortUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new PortUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Ports.IPortUsage)data, elementName, writerOptions, originMap, uri); + }, + ["Predicate"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new PredicateWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Functions.IPredicate)data, elementName, writerOptions, originMap, uri); + }, + ["Redefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new RedefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Core.Features.IRedefinition)data, elementName, writerOptions, originMap, uri); + }, + ["ReferenceSubsetting"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ReferenceSubsettingWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Core.Features.IReferenceSubsetting)data, elementName, writerOptions, originMap, uri); + }, + ["ReferenceUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ReferenceUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.DefinitionAndUsage.IReferenceUsage)data, elementName, writerOptions, originMap, uri); + }, + ["RenderingDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new RenderingDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Views.IRenderingDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["RenderingUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new RenderingUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Views.IRenderingUsage)data, elementName, writerOptions, originMap, uri); + }, + ["RequirementConstraintMembership"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new RequirementConstraintMembershipWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Requirements.IRequirementConstraintMembership)data, elementName, writerOptions, originMap, uri); + }, + ["RequirementDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new RequirementDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Requirements.IRequirementDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["RequirementUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new RequirementUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Requirements.IRequirementUsage)data, elementName, writerOptions, originMap, uri); + }, + ["RequirementVerificationMembership"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new RequirementVerificationMembershipWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.VerificationCases.IRequirementVerificationMembership)data, elementName, writerOptions, originMap, uri); + }, + ["ResultExpressionMembership"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ResultExpressionMembershipWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Functions.IResultExpressionMembership)data, elementName, writerOptions, originMap, uri); + }, + ["ReturnParameterMembership"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ReturnParameterMembershipWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Functions.IReturnParameterMembership)data, elementName, writerOptions, originMap, uri); + }, + ["SatisfyRequirementUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SatisfyRequirementUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Requirements.ISatisfyRequirementUsage)data, elementName, writerOptions, originMap, uri); + }, + ["SelectExpression"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SelectExpressionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Expressions.ISelectExpression)data, elementName, writerOptions, originMap, uri); + }, + ["SendActionUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SendActionUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Actions.ISendActionUsage)data, elementName, writerOptions, originMap, uri); + }, + ["Specialization"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SpecializationWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Core.Types.ISpecialization)data, elementName, writerOptions, originMap, uri); + }, + ["StakeholderMembership"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new StakeholderMembershipWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Requirements.IStakeholderMembership)data, elementName, writerOptions, originMap, uri); + }, + ["StateDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new StateDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.States.IStateDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["StateSubactionMembership"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new StateSubactionMembershipWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.States.IStateSubactionMembership)data, elementName, writerOptions, originMap, uri); + }, + ["StateUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new StateUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.States.IStateUsage)data, elementName, writerOptions, originMap, uri); + }, + ["Step"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new StepWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Behaviors.IStep)data, elementName, writerOptions, originMap, uri); + }, + ["Structure"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new StructureWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Structures.IStructure)data, elementName, writerOptions, originMap, uri); + }, + ["Subclassification"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SubclassificationWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Core.Classifiers.ISubclassification)data, elementName, writerOptions, originMap, uri); + }, + ["SubjectMembership"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SubjectMembershipWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Requirements.ISubjectMembership)data, elementName, writerOptions, originMap, uri); + }, + ["Subsetting"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SubsettingWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Core.Features.ISubsetting)data, elementName, writerOptions, originMap, uri); + }, + ["Succession"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SuccessionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Connectors.ISuccession)data, elementName, writerOptions, originMap, uri); + }, + ["SuccessionAsUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SuccessionAsUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Connections.ISuccessionAsUsage)data, elementName, writerOptions, originMap, uri); + }, + ["SuccessionFlow"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SuccessionFlowWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Kernel.Interactions.ISuccessionFlow)data, elementName, writerOptions, originMap, uri); + }, + ["SuccessionFlowUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SuccessionFlowUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Flows.ISuccessionFlowUsage)data, elementName, writerOptions, originMap, uri); + }, + ["TerminateActionUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new TerminateActionUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Actions.ITerminateActionUsage)data, elementName, writerOptions, originMap, uri); + }, + ["TextualRepresentation"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new TextualRepresentationWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Root.Annotations.ITextualRepresentation)data, elementName, writerOptions, originMap, uri); + }, + ["TransitionFeatureMembership"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new TransitionFeatureMembershipWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.States.ITransitionFeatureMembership)data, elementName, writerOptions, originMap, uri); + }, + ["TransitionUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new TransitionUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.States.ITransitionUsage)data, elementName, writerOptions, originMap, uri); + }, + ["TriggerInvocationExpression"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new TriggerInvocationExpressionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Actions.ITriggerInvocationExpression)data, elementName, writerOptions, originMap, uri); + }, + ["Type"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new TypeWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Core.Types.IType)data, elementName, writerOptions, originMap, uri); + }, + ["TypeFeaturing"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new TypeFeaturingWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Core.Features.ITypeFeaturing)data, elementName, writerOptions, originMap, uri); + }, + ["Unioning"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new UnioningWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Core.Types.IUnioning)data, elementName, writerOptions, originMap, uri); + }, + ["Usage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new UsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.DefinitionAndUsage.IUsage)data, elementName, writerOptions, originMap, uri); + }, + ["UseCaseDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new UseCaseDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.UseCases.IUseCaseDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["UseCaseUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new UseCaseUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.UseCases.IUseCaseUsage)data, elementName, writerOptions, originMap, uri); + }, + ["VariantMembership"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new VariantMembershipWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.DefinitionAndUsage.IVariantMembership)data, elementName, writerOptions, originMap, uri); + }, + ["VerificationCaseDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new VerificationCaseDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.VerificationCases.IVerificationCaseDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["VerificationCaseUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new VerificationCaseUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.VerificationCases.IVerificationCaseUsage)data, elementName, writerOptions, originMap, uri); + }, + ["ViewDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ViewDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Views.IViewDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["ViewpointDefinition"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ViewpointDefinitionWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Views.IViewpointDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["ViewpointUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ViewpointUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Views.IViewpointUsage)data, elementName, writerOptions, originMap, uri); + }, + ["ViewRenderingMembership"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ViewRenderingMembershipWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Views.IViewRenderingMembership)data, elementName, writerOptions, originMap, uri); + }, + ["ViewUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ViewUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Views.IViewUsage)data, elementName, writerOptions, originMap, uri); + }, + ["WhileLoopActionUsage"] = (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new WhileLoopActionUsageWriter(this, this.loggerFactory); + writer.Write(xmlWriter, (Core.POCO.Systems.Actions.IWhileLoopActionUsage)data, elementName, writerOptions, originMap, uri); + }, + }; + + this.writerAsyncCache = new Dictionary> + { + ["AcceptActionUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AcceptActionUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Actions.IAcceptActionUsage)data, elementName, writerOptions, originMap, uri); + }, + ["ActionDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ActionDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Actions.IActionDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["ActionUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ActionUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Actions.IActionUsage)data, elementName, writerOptions, originMap, uri); + }, + ["ActorMembership"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ActorMembershipWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Requirements.IActorMembership)data, elementName, writerOptions, originMap, uri); + }, + ["AllocationDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AllocationDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Allocations.IAllocationDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["AllocationUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AllocationUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Allocations.IAllocationUsage)data, elementName, writerOptions, originMap, uri); + }, + ["AnalysisCaseDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AnalysisCaseDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.AnalysisCases.IAnalysisCaseDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["AnalysisCaseUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AnalysisCaseUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.AnalysisCases.IAnalysisCaseUsage)data, elementName, writerOptions, originMap, uri); + }, + ["AnnotatingElement"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AnnotatingElementWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Root.Annotations.IAnnotatingElement)data, elementName, writerOptions, originMap, uri); + }, + ["Annotation"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AnnotationWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Root.Annotations.IAnnotation)data, elementName, writerOptions, originMap, uri); + }, + ["AssertConstraintUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AssertConstraintUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Constraints.IAssertConstraintUsage)data, elementName, writerOptions, originMap, uri); + }, + ["AssignmentActionUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AssignmentActionUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Actions.IAssignmentActionUsage)data, elementName, writerOptions, originMap, uri); + }, + ["Association"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AssociationWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Associations.IAssociation)data, elementName, writerOptions, originMap, uri); + }, + ["AssociationStructure"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AssociationStructureWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Associations.IAssociationStructure)data, elementName, writerOptions, originMap, uri); + }, + ["AttributeDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AttributeDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Attributes.IAttributeDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["AttributeUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new AttributeUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Attributes.IAttributeUsage)data, elementName, writerOptions, originMap, uri); + }, + ["Behavior"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new BehaviorWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Behaviors.IBehavior)data, elementName, writerOptions, originMap, uri); + }, + ["BindingConnector"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new BindingConnectorWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Connectors.IBindingConnector)data, elementName, writerOptions, originMap, uri); + }, + ["BindingConnectorAsUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new BindingConnectorAsUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Connections.IBindingConnectorAsUsage)data, elementName, writerOptions, originMap, uri); + }, + ["BooleanExpression"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new BooleanExpressionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Functions.IBooleanExpression)data, elementName, writerOptions, originMap, uri); + }, + ["CalculationDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new CalculationDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Calculations.ICalculationDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["CalculationUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new CalculationUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Calculations.ICalculationUsage)data, elementName, writerOptions, originMap, uri); + }, + ["CaseDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new CaseDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Cases.ICaseDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["CaseUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new CaseUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Cases.ICaseUsage)data, elementName, writerOptions, originMap, uri); + }, + ["Class"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ClassWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Classes.IClass)data, elementName, writerOptions, originMap, uri); + }, + ["Classifier"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ClassifierWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Core.Classifiers.IClassifier)data, elementName, writerOptions, originMap, uri); + }, + ["CollectExpression"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new CollectExpressionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Expressions.ICollectExpression)data, elementName, writerOptions, originMap, uri); + }, + ["Comment"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new CommentWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Root.Annotations.IComment)data, elementName, writerOptions, originMap, uri); + }, + ["ConcernDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConcernDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Requirements.IConcernDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["ConcernUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConcernUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Requirements.IConcernUsage)data, elementName, writerOptions, originMap, uri); + }, + ["ConjugatedPortDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConjugatedPortDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Ports.IConjugatedPortDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["ConjugatedPortTyping"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConjugatedPortTypingWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Ports.IConjugatedPortTyping)data, elementName, writerOptions, originMap, uri); + }, + ["Conjugation"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConjugationWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Core.Types.IConjugation)data, elementName, writerOptions, originMap, uri); + }, + ["ConnectionDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConnectionDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Connections.IConnectionDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["ConnectionUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConnectionUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Connections.IConnectionUsage)data, elementName, writerOptions, originMap, uri); + }, + ["Connector"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConnectorWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Connectors.IConnector)data, elementName, writerOptions, originMap, uri); + }, + ["ConstraintDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConstraintDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Constraints.IConstraintDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["ConstraintUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConstraintUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Constraints.IConstraintUsage)data, elementName, writerOptions, originMap, uri); + }, + ["ConstructorExpression"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ConstructorExpressionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Expressions.IConstructorExpression)data, elementName, writerOptions, originMap, uri); + }, + ["CrossSubsetting"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new CrossSubsettingWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Core.Features.ICrossSubsetting)data, elementName, writerOptions, originMap, uri); + }, + ["DataType"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new DataTypeWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.DataTypes.IDataType)data, elementName, writerOptions, originMap, uri); + }, + ["DecisionNode"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new DecisionNodeWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Actions.IDecisionNode)data, elementName, writerOptions, originMap, uri); + }, + ["Definition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new DefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.DefinitionAndUsage.IDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["Dependency"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new DependencyWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Root.Dependencies.IDependency)data, elementName, writerOptions, originMap, uri); + }, + ["Differencing"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new DifferencingWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Core.Types.IDifferencing)data, elementName, writerOptions, originMap, uri); + }, + ["Disjoining"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new DisjoiningWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Core.Types.IDisjoining)data, elementName, writerOptions, originMap, uri); + }, + ["Documentation"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new DocumentationWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Root.Annotations.IDocumentation)data, elementName, writerOptions, originMap, uri); + }, + ["ElementFilterMembership"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ElementFilterMembershipWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Packages.IElementFilterMembership)data, elementName, writerOptions, originMap, uri); + }, + ["EndFeatureMembership"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new EndFeatureMembershipWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Core.Features.IEndFeatureMembership)data, elementName, writerOptions, originMap, uri); + }, + ["EnumerationDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new EnumerationDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Enumerations.IEnumerationDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["EnumerationUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new EnumerationUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Enumerations.IEnumerationUsage)data, elementName, writerOptions, originMap, uri); + }, + ["EventOccurrenceUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new EventOccurrenceUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Occurrences.IEventOccurrenceUsage)data, elementName, writerOptions, originMap, uri); + }, + ["ExhibitStateUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ExhibitStateUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.States.IExhibitStateUsage)data, elementName, writerOptions, originMap, uri); + }, + ["Expression"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ExpressionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Functions.IExpression)data, elementName, writerOptions, originMap, uri); + }, + ["Feature"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FeatureWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Core.Features.IFeature)data, elementName, writerOptions, originMap, uri); + }, + ["FeatureChainExpression"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FeatureChainExpressionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Expressions.IFeatureChainExpression)data, elementName, writerOptions, originMap, uri); + }, + ["FeatureChaining"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FeatureChainingWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Core.Features.IFeatureChaining)data, elementName, writerOptions, originMap, uri); + }, + ["FeatureInverting"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FeatureInvertingWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Core.Features.IFeatureInverting)data, elementName, writerOptions, originMap, uri); + }, + ["FeatureMembership"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FeatureMembershipWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Core.Types.IFeatureMembership)data, elementName, writerOptions, originMap, uri); + }, + ["FeatureReferenceExpression"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FeatureReferenceExpressionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Expressions.IFeatureReferenceExpression)data, elementName, writerOptions, originMap, uri); + }, + ["FeatureTyping"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FeatureTypingWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Core.Features.IFeatureTyping)data, elementName, writerOptions, originMap, uri); + }, + ["FeatureValue"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FeatureValueWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.FeatureValues.IFeatureValue)data, elementName, writerOptions, originMap, uri); + }, + ["Flow"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FlowWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Interactions.IFlow)data, elementName, writerOptions, originMap, uri); + }, + ["FlowDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FlowDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Flows.IFlowDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["FlowEnd"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FlowEndWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Interactions.IFlowEnd)data, elementName, writerOptions, originMap, uri); + }, + ["FlowUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FlowUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Flows.IFlowUsage)data, elementName, writerOptions, originMap, uri); + }, + ["ForkNode"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ForkNodeWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Actions.IForkNode)data, elementName, writerOptions, originMap, uri); + }, + ["ForLoopActionUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ForLoopActionUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Actions.IForLoopActionUsage)data, elementName, writerOptions, originMap, uri); + }, + ["FramedConcernMembership"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FramedConcernMembershipWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Requirements.IFramedConcernMembership)data, elementName, writerOptions, originMap, uri); + }, + ["Function"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new FunctionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Functions.IFunction)data, elementName, writerOptions, originMap, uri); + }, + ["IfActionUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new IfActionUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Actions.IIfActionUsage)data, elementName, writerOptions, originMap, uri); + }, + ["IncludeUseCaseUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new IncludeUseCaseUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.UseCases.IIncludeUseCaseUsage)data, elementName, writerOptions, originMap, uri); + }, + ["IndexExpression"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new IndexExpressionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Expressions.IIndexExpression)data, elementName, writerOptions, originMap, uri); + }, + ["Interaction"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new InteractionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Interactions.IInteraction)data, elementName, writerOptions, originMap, uri); + }, + ["InterfaceDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new InterfaceDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Interfaces.IInterfaceDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["InterfaceUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new InterfaceUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Interfaces.IInterfaceUsage)data, elementName, writerOptions, originMap, uri); + }, + ["Intersecting"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new IntersectingWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Core.Types.IIntersecting)data, elementName, writerOptions, originMap, uri); + }, + ["Invariant"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new InvariantWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Functions.IInvariant)data, elementName, writerOptions, originMap, uri); + }, + ["InvocationExpression"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new InvocationExpressionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Expressions.IInvocationExpression)data, elementName, writerOptions, originMap, uri); + }, + ["ItemDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ItemDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Items.IItemDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["ItemUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ItemUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Items.IItemUsage)data, elementName, writerOptions, originMap, uri); + }, + ["JoinNode"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new JoinNodeWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Actions.IJoinNode)data, elementName, writerOptions, originMap, uri); + }, + ["LibraryPackage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new LibraryPackageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Packages.ILibraryPackage)data, elementName, writerOptions, originMap, uri); + }, + ["LiteralBoolean"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new LiteralBooleanWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Expressions.ILiteralBoolean)data, elementName, writerOptions, originMap, uri); + }, + ["LiteralExpression"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new LiteralExpressionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Expressions.ILiteralExpression)data, elementName, writerOptions, originMap, uri); + }, + ["LiteralInfinity"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new LiteralInfinityWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Expressions.ILiteralInfinity)data, elementName, writerOptions, originMap, uri); + }, + ["LiteralInteger"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new LiteralIntegerWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Expressions.ILiteralInteger)data, elementName, writerOptions, originMap, uri); + }, + ["LiteralRational"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new LiteralRationalWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Expressions.ILiteralRational)data, elementName, writerOptions, originMap, uri); + }, + ["LiteralString"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new LiteralStringWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Expressions.ILiteralString)data, elementName, writerOptions, originMap, uri); + }, + ["Membership"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MembershipWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Root.Namespaces.IMembership)data, elementName, writerOptions, originMap, uri); + }, + ["MembershipExpose"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MembershipExposeWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Views.IMembershipExpose)data, elementName, writerOptions, originMap, uri); + }, + ["MembershipImport"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MembershipImportWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Root.Namespaces.IMembershipImport)data, elementName, writerOptions, originMap, uri); + }, + ["MergeNode"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MergeNodeWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Actions.IMergeNode)data, elementName, writerOptions, originMap, uri); + }, + ["Metaclass"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MetaclassWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Metadata.IMetaclass)data, elementName, writerOptions, originMap, uri); + }, + ["MetadataAccessExpression"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MetadataAccessExpressionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Expressions.IMetadataAccessExpression)data, elementName, writerOptions, originMap, uri); + }, + ["MetadataDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MetadataDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Metadata.IMetadataDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["MetadataFeature"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MetadataFeatureWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Metadata.IMetadataFeature)data, elementName, writerOptions, originMap, uri); + }, + ["MetadataUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MetadataUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Metadata.IMetadataUsage)data, elementName, writerOptions, originMap, uri); + }, + ["Multiplicity"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MultiplicityWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Core.Types.IMultiplicity)data, elementName, writerOptions, originMap, uri); + }, + ["MultiplicityRange"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new MultiplicityRangeWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Multiplicities.IMultiplicityRange)data, elementName, writerOptions, originMap, uri); + }, + ["Namespace"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new NamespaceWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Root.Namespaces.INamespace)data, elementName, writerOptions, originMap, uri); + }, + ["NamespaceExpose"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new NamespaceExposeWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Views.INamespaceExpose)data, elementName, writerOptions, originMap, uri); + }, + ["NamespaceImport"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new NamespaceImportWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Root.Namespaces.INamespaceImport)data, elementName, writerOptions, originMap, uri); + }, + ["NullExpression"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new NullExpressionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Expressions.INullExpression)data, elementName, writerOptions, originMap, uri); + }, + ["ObjectiveMembership"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ObjectiveMembershipWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Cases.IObjectiveMembership)data, elementName, writerOptions, originMap, uri); + }, + ["OccurrenceDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new OccurrenceDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Occurrences.IOccurrenceDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["OccurrenceUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new OccurrenceUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Occurrences.IOccurrenceUsage)data, elementName, writerOptions, originMap, uri); + }, + ["OperatorExpression"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new OperatorExpressionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Expressions.IOperatorExpression)data, elementName, writerOptions, originMap, uri); + }, + ["OwningMembership"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new OwningMembershipWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Root.Namespaces.IOwningMembership)data, elementName, writerOptions, originMap, uri); + }, + ["Package"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new PackageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Packages.IPackage)data, elementName, writerOptions, originMap, uri); + }, + ["ParameterMembership"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ParameterMembershipWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Behaviors.IParameterMembership)data, elementName, writerOptions, originMap, uri); + }, + ["PartDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new PartDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Parts.IPartDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["PartUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new PartUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Parts.IPartUsage)data, elementName, writerOptions, originMap, uri); + }, + ["PayloadFeature"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new PayloadFeatureWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Interactions.IPayloadFeature)data, elementName, writerOptions, originMap, uri); + }, + ["PerformActionUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new PerformActionUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Actions.IPerformActionUsage)data, elementName, writerOptions, originMap, uri); + }, + ["PortConjugation"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new PortConjugationWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Ports.IPortConjugation)data, elementName, writerOptions, originMap, uri); + }, + ["PortDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new PortDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Ports.IPortDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["PortUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new PortUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Ports.IPortUsage)data, elementName, writerOptions, originMap, uri); + }, + ["Predicate"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new PredicateWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Functions.IPredicate)data, elementName, writerOptions, originMap, uri); + }, + ["Redefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new RedefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Core.Features.IRedefinition)data, elementName, writerOptions, originMap, uri); + }, + ["ReferenceSubsetting"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ReferenceSubsettingWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Core.Features.IReferenceSubsetting)data, elementName, writerOptions, originMap, uri); + }, + ["ReferenceUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ReferenceUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.DefinitionAndUsage.IReferenceUsage)data, elementName, writerOptions, originMap, uri); + }, + ["RenderingDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new RenderingDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Views.IRenderingDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["RenderingUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new RenderingUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Views.IRenderingUsage)data, elementName, writerOptions, originMap, uri); + }, + ["RequirementConstraintMembership"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new RequirementConstraintMembershipWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Requirements.IRequirementConstraintMembership)data, elementName, writerOptions, originMap, uri); + }, + ["RequirementDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new RequirementDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Requirements.IRequirementDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["RequirementUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new RequirementUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Requirements.IRequirementUsage)data, elementName, writerOptions, originMap, uri); + }, + ["RequirementVerificationMembership"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new RequirementVerificationMembershipWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.VerificationCases.IRequirementVerificationMembership)data, elementName, writerOptions, originMap, uri); + }, + ["ResultExpressionMembership"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ResultExpressionMembershipWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Functions.IResultExpressionMembership)data, elementName, writerOptions, originMap, uri); + }, + ["ReturnParameterMembership"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ReturnParameterMembershipWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Functions.IReturnParameterMembership)data, elementName, writerOptions, originMap, uri); + }, + ["SatisfyRequirementUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SatisfyRequirementUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Requirements.ISatisfyRequirementUsage)data, elementName, writerOptions, originMap, uri); + }, + ["SelectExpression"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SelectExpressionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Expressions.ISelectExpression)data, elementName, writerOptions, originMap, uri); + }, + ["SendActionUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SendActionUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Actions.ISendActionUsage)data, elementName, writerOptions, originMap, uri); + }, + ["Specialization"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SpecializationWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Core.Types.ISpecialization)data, elementName, writerOptions, originMap, uri); + }, + ["StakeholderMembership"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new StakeholderMembershipWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Requirements.IStakeholderMembership)data, elementName, writerOptions, originMap, uri); + }, + ["StateDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new StateDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.States.IStateDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["StateSubactionMembership"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new StateSubactionMembershipWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.States.IStateSubactionMembership)data, elementName, writerOptions, originMap, uri); + }, + ["StateUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new StateUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.States.IStateUsage)data, elementName, writerOptions, originMap, uri); + }, + ["Step"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new StepWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Behaviors.IStep)data, elementName, writerOptions, originMap, uri); + }, + ["Structure"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new StructureWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Structures.IStructure)data, elementName, writerOptions, originMap, uri); + }, + ["Subclassification"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SubclassificationWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Core.Classifiers.ISubclassification)data, elementName, writerOptions, originMap, uri); + }, + ["SubjectMembership"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SubjectMembershipWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Requirements.ISubjectMembership)data, elementName, writerOptions, originMap, uri); + }, + ["Subsetting"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SubsettingWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Core.Features.ISubsetting)data, elementName, writerOptions, originMap, uri); + }, + ["Succession"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SuccessionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Connectors.ISuccession)data, elementName, writerOptions, originMap, uri); + }, + ["SuccessionAsUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SuccessionAsUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Connections.ISuccessionAsUsage)data, elementName, writerOptions, originMap, uri); + }, + ["SuccessionFlow"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SuccessionFlowWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Kernel.Interactions.ISuccessionFlow)data, elementName, writerOptions, originMap, uri); + }, + ["SuccessionFlowUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new SuccessionFlowUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Flows.ISuccessionFlowUsage)data, elementName, writerOptions, originMap, uri); + }, + ["TerminateActionUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new TerminateActionUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Actions.ITerminateActionUsage)data, elementName, writerOptions, originMap, uri); + }, + ["TextualRepresentation"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new TextualRepresentationWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Root.Annotations.ITextualRepresentation)data, elementName, writerOptions, originMap, uri); + }, + ["TransitionFeatureMembership"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new TransitionFeatureMembershipWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.States.ITransitionFeatureMembership)data, elementName, writerOptions, originMap, uri); + }, + ["TransitionUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new TransitionUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.States.ITransitionUsage)data, elementName, writerOptions, originMap, uri); + }, + ["TriggerInvocationExpression"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new TriggerInvocationExpressionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Actions.ITriggerInvocationExpression)data, elementName, writerOptions, originMap, uri); + }, + ["Type"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new TypeWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Core.Types.IType)data, elementName, writerOptions, originMap, uri); + }, + ["TypeFeaturing"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new TypeFeaturingWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Core.Features.ITypeFeaturing)data, elementName, writerOptions, originMap, uri); + }, + ["Unioning"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new UnioningWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Core.Types.IUnioning)data, elementName, writerOptions, originMap, uri); + }, + ["Usage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new UsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.DefinitionAndUsage.IUsage)data, elementName, writerOptions, originMap, uri); + }, + ["UseCaseDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new UseCaseDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.UseCases.IUseCaseDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["UseCaseUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new UseCaseUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.UseCases.IUseCaseUsage)data, elementName, writerOptions, originMap, uri); + }, + ["VariantMembership"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new VariantMembershipWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.DefinitionAndUsage.IVariantMembership)data, elementName, writerOptions, originMap, uri); + }, + ["VerificationCaseDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new VerificationCaseDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.VerificationCases.IVerificationCaseDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["VerificationCaseUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new VerificationCaseUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.VerificationCases.IVerificationCaseUsage)data, elementName, writerOptions, originMap, uri); + }, + ["ViewDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ViewDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Views.IViewDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["ViewpointDefinition"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ViewpointDefinitionWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Views.IViewpointDefinition)data, elementName, writerOptions, originMap, uri); + }, + ["ViewpointUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ViewpointUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Views.IViewpointUsage)data, elementName, writerOptions, originMap, uri); + }, + ["ViewRenderingMembership"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ViewRenderingMembershipWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Views.IViewRenderingMembership)data, elementName, writerOptions, originMap, uri); + }, + ["ViewUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new ViewUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Views.IViewUsage)data, elementName, writerOptions, originMap, uri); + }, + ["WhileLoopActionUsage"] = async (xmlWriter, data, elementName, writerOptions, originMap, uri) => + { + var writer = new WhileLoopActionUsageWriter(this, this.loggerFactory); + await writer.WriteAsync(xmlWriter, (Core.POCO.Systems.Actions.IWhileLoopActionUsage)data, elementName, writerOptions, originMap, uri); + }, + }; + } + + /// + /// Writes the specified as an XMI element by dispatching to the appropriate per-type writer + /// + /// The target + /// The to write + /// The XML element name to use + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The of the current output file for relative href computation + public void Write(XmlWriter xmlWriter, IData data, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + var typeName = data.GetType().Name; + + if (this.writerCache.TryGetValue(typeName, out var writer)) + { + writer(xmlWriter, data, elementName, writerOptions, elementOriginMap, currentFileUri); + } + else + { + throw new InvalidOperationException($"No writer found for type {typeName}"); + } + } + + /// + /// Writes a contained child element, checking origin map for cross-file href + /// + /// The target + /// The child to write + /// The XML element name to use + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The of the current output file for relative href computation + /// Asserts that the XSI type should be specified in case of HREF + public void WriteContainedElement(XmlWriter xmlWriter, IData childData, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap, Uri currentFileUri, bool shouldSpecifyType = false) + { + if (!writerOptions.IncludeImplied && childData is IRelationship rel && rel.IsImplied) + { + return; + } + + if (elementOriginMap != null && currentFileUri != null) + { + var childSourceFile = elementOriginMap.GetSourceFile(childData.Id); + + if (childSourceFile != null && childSourceFile != currentFileUri) + { + WriteHrefElement(xmlWriter, childData, elementName, childSourceFile, currentFileUri, shouldSpecifyType); + return; + } + } + + this.Write(xmlWriter, childData, elementName, writerOptions, elementOriginMap, currentFileUri); + } + + /// + /// Writes a reference child element, checking origin map for cross-file href + /// + /// The target + /// The child to write + /// The XML element name to use + /// The optional for href reconstruction + /// The of the current output file for relative href computation + /// Asserts that the XSI type should be specified in case of HREF + public void WriteReferenceElement(XmlWriter xmlWriter, IData childData, string elementName, IXmiElementOriginMap elementOriginMap, Uri currentFileUri, bool shouldSpecifyType = false) + { + if (elementOriginMap != null && currentFileUri != null) + { + var childSourceFile = elementOriginMap.GetSourceFile(childData.Id); + + if (childSourceFile != null && childSourceFile != currentFileUri) + { + WriteHrefElement(xmlWriter, childData, elementName, childSourceFile, currentFileUri, shouldSpecifyType); + return; + } + } + + xmlWriter.WriteStartElement(elementName); + xmlWriter.WriteAttributeString("xmi", "idref", null, childData.Id.ToString()); + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes the specified as an XMI element by dispatching to the appropriate per-type writer + /// + /// The target + /// The to write + /// The XML element name to use + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The of the current output file for relative href computation + public async Task WriteAsync(XmlWriter xmlWriter, IData data, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null) + { + var typeName = data.GetType().Name; + + if (this.writerAsyncCache.TryGetValue(typeName, out var writer)) + { + await writer(xmlWriter, data, elementName, writerOptions, elementOriginMap, currentFileUri); + } + else + { + throw new InvalidOperationException($"No writer found for type {typeName}"); + } + } + + /// + /// Asynchronously writes a contained child element, checking origin map for cross-file href + /// + /// The target + /// The child to write + /// The XML element name to use + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The of the current output file for relative href computation + /// Asserts that the XSI type should be specified in case of HREF + public async Task WriteContainedElementAsync(XmlWriter xmlWriter, IData childData, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap, Uri currentFileUri, bool shouldSpecifyType = false) + { + if (!writerOptions.IncludeImplied && childData is IRelationship rel && rel.IsImplied) + { + return; + } + + if (elementOriginMap != null && currentFileUri != null) + { + var childSourceFile = elementOriginMap.GetSourceFile(childData.Id); + + if (childSourceFile != null && childSourceFile != currentFileUri) + { + await WriteHrefElementAsync(xmlWriter, childData, elementName, childSourceFile, currentFileUri, shouldSpecifyType); + return; + } + } + + await this.WriteAsync(xmlWriter, childData, elementName, writerOptions, elementOriginMap, currentFileUri); + } + + /// + /// Asynchronously writes a reference child element, checking origin map for cross-file href + /// + /// The target + /// The child to write + /// The XML element name to use + /// The optional for href reconstruction + /// The of the current output file for relative href computation + /// Asserts that the XSI type should be specified in case of HREF + public async Task WriteReferenceElementAsync(XmlWriter xmlWriter, IData childData, string elementName, IXmiElementOriginMap elementOriginMap, Uri currentFileUri, bool shouldSpecifyType = false) + { + if (elementOriginMap != null && currentFileUri != null) + { + var childSourceFile = elementOriginMap.GetSourceFile(childData.Id); + + if (childSourceFile != null && childSourceFile != currentFileUri) + { + await WriteHrefElementAsync(xmlWriter, childData, elementName, childSourceFile, currentFileUri, shouldSpecifyType); + return; + } + } + + await xmlWriter.WriteStartElementAsync(null, elementName, null); + await xmlWriter.WriteAttributeStringAsync("xmi", "idref", null, childData.Id.ToString()); + await xmlWriter.WriteEndElementAsync(); + } + + /// + /// Writes an href element for cross-file references + /// + private static void WriteHrefElement(XmlWriter xmlWriter, IData childData, string elementName, Uri targetFile, Uri currentFile, bool shouldSpecifyType) + { + var relativePath = currentFile.MakeRelativeUri(targetFile); + var href = $"{Uri.UnescapeDataString(relativePath.ToString())}#{childData.Id}"; + + xmlWriter.WriteStartElement(elementName); + + if (shouldSpecifyType) + { + xmlWriter.WriteAttributeString("xsi", "type", null, $"sysml:{childData.GetType().Name}"); + } + + xmlWriter.WriteAttributeString("href", href); + xmlWriter.WriteEndElement(); + } + + /// + /// Asynchronously writes an href element for cross-file references + /// + private static async Task WriteHrefElementAsync(XmlWriter xmlWriter, IData childData, string elementName, Uri targetFile, Uri currentFile, bool shouldSpecifyType) + { + var relativePath = currentFile.MakeRelativeUri(targetFile); + var href = $"{Uri.UnescapeDataString(relativePath.ToString())}#{childData.Id}"; + + await xmlWriter.WriteStartElementAsync(null, elementName, null); + + if (shouldSpecifyType) + { + await xmlWriter.WriteAttributeStringAsync("xsi", "type", null, $"sysml:{childData.GetType().Name}"); + } + + await xmlWriter.WriteAttributeStringAsync(null, "href", null, href); + await xmlWriter.WriteEndElementAsync(); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// --------THIS IS AN AUTOMATICALLY GENERATED FILE. ANY MANUAL CHANGES WILL BE OVERWRITTEN!-------- +// ------------------------------------------------------------------------------------------------ diff --git a/SysML2.NET.Serializer.Xmi/Writers/IXmiDataWriterFacade.cs b/SysML2.NET.Serializer.Xmi/Writers/IXmiDataWriterFacade.cs new file mode 100644 index 000000000..8ba7c0672 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/IXmiDataWriterFacade.cs @@ -0,0 +1,103 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Threading.Tasks; + using System.Xml; + + using SysML2.NET.Common; + + /// + /// The purpose of the is to dispatch writing of instances + /// to the appropriate per-type static writer class + /// + public interface IXmiDataWriterFacade + { + /// + /// Writes the specified as an XMI element by dispatching to the appropriate per-type writer + /// + /// The target + /// The to write + /// The XML element name to use + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The of the current output file for relative href computation + void Write(XmlWriter xmlWriter, IData data, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null); + + /// + /// Writes a contained child element, checking origin map for cross-file href + /// + /// The target + /// The child to write + /// The XML element name to use + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The of the current output file for relative href computation + /// Asserts that the XSI type should be specified in case of HREF + void WriteContainedElement(XmlWriter xmlWriter, IData childData, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap, Uri currentFileUri, bool shouldSpecifyType = false); + + /// + /// Writes a reference child element, checking origin map for cross-file href + /// + /// The target + /// The child to write + /// The XML element name to use + /// The optional for href reconstruction + /// The of the current output file for relative href computation + /// Asserts that the XSI type should be specified in case of HREF + void WriteReferenceElement(XmlWriter xmlWriter, IData childData, string elementName, IXmiElementOriginMap elementOriginMap, Uri currentFileUri, bool shouldSpecifyType = false); + + /// + /// Asynchronously writes the specified as an XMI element by dispatching to the appropriate per-type writer + /// + /// The target + /// The to write + /// The XML element name to use + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The of the current output file for relative href computation + Task WriteAsync(XmlWriter xmlWriter, IData data, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, Uri currentFileUri = null); + + /// + /// Asynchronously writes a contained child element, checking origin map for cross-file href + /// + /// The target + /// The child to write + /// The XML element name to use + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The of the current output file for relative href computation + /// Asserts that the XSI type should be specified in case of HREF + Task WriteContainedElementAsync(XmlWriter xmlWriter, IData childData, string elementName, XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap, Uri currentFileUri, bool shouldSpecifyType = false); + + /// + /// Asynchronously writes a reference child element, checking origin map for cross-file href + /// + /// The target + /// The child to write + /// The XML element name to use + /// The optional for href reconstruction + /// The of the current output file for relative href computation + /// Asserts that the XSI type should be specified in case of HREF + Task WriteReferenceElementAsync(XmlWriter xmlWriter, IData childData, string elementName, IXmiElementOriginMap elementOriginMap, Uri currentFileUri, bool shouldSpecifyType = false); + } +} diff --git a/SysML2.NET.Serializer.Xmi/Writers/XmiDataWriter.cs b/SysML2.NET.Serializer.Xmi/Writers/XmiDataWriter.cs new file mode 100644 index 000000000..95ed58a52 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/XmiDataWriter.cs @@ -0,0 +1,87 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + using System; + using System.Threading.Tasks; + using System.Xml; + + using Microsoft.Extensions.Logging; + + using SysML2.NET.Common; + + /// + /// Abstract super class for each XMI writer + /// + /// The type of that needs to be written + public abstract class XmiDataWriter where TData : IData + { + /// + /// The injected that provides dispatch to per-type writers + /// + protected readonly IXmiDataWriterFacade XmiDataWriterFacade; + + /// + /// The injected used to set up logging + /// + protected readonly ILoggerFactory LoggerFactory; + + /// + /// Initializes a new instance of the + /// + /// + /// The injected that provides dispatch to per-type writers + /// + /// The injected used to set up logging + protected XmiDataWriter(IXmiDataWriterFacade xmiDataWriterFacade, ILoggerFactory loggerFactory) + { + this.XmiDataWriterFacade = xmiDataWriterFacade; + this.LoggerFactory = loggerFactory; + } + + /// + /// Writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + public abstract void Write(XmlWriter xmlWriter, TData data, string elementName, + XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, + Uri currentFileUri = null); + + /// + /// Asynchronously writes the object to its XML representation + /// + /// The target + /// The to write + /// The XML element name + /// The instance that provides writer output configuration + /// The optional for href reconstruction + /// The optional of the current output file + /// An awaitable + public abstract Task WriteAsync(XmlWriter xmlWriter, TData data, string elementName, + XmiWriterOptions writerOptions, IXmiElementOriginMap elementOriginMap = null, + Uri currentFileUri = null); + } +} diff --git a/SysML2.NET.Serializer.Xmi/Writers/XmiWriterOptions.cs b/SysML2.NET.Serializer.Xmi/Writers/XmiWriterOptions.cs new file mode 100644 index 000000000..4c7ccd00e --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/Writers/XmiWriterOptions.cs @@ -0,0 +1,49 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi.Writers +{ + /// + /// The provides centralized option provided to to customize output format + /// + public class XmiWriterOptions + { + /// + /// Asserts if derived properties have to be included or not. + /// + public bool IncludeDerivedProperties { get; set; } + + /// + /// Asserts if implied properties have to be included or not. + /// The project-level includesImplied flag as defined in KerML Clause 10, Note 5. + /// When true, all implied relationships are serialized and every element's isImpliedIncluded + /// attribute is written as "true". When false, implied relationships (where + /// is true) are excluded + /// and no element's isImpliedIncluded attribute is written. + /// + public bool IncludeImplied { get; set; } + + /// + /// Asserts if Id Reference values have to be written as attribute, when applicable. + /// Default value is true + /// + public bool WriteIdRefAsAttribute { get; set; } = true; + } +} diff --git a/SysML2.NET.Serializer.Xmi/XmiElementOriginMap.cs b/SysML2.NET.Serializer.Xmi/XmiElementOriginMap.cs new file mode 100644 index 000000000..aa4105de9 --- /dev/null +++ b/SysML2.NET.Serializer.Xmi/XmiElementOriginMap.cs @@ -0,0 +1,101 @@ +// ------------------------------------------------------------------------------------------------- +// +// +// Copyright 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// ------------------------------------------------------------------------------------------------ + +namespace SysML2.NET.Serializer.Xmi +{ + using System; + using System.Collections.Generic; + using System.Linq; + + /// + /// Tracks the association between elements and the XMI source files they were deserialized from. + /// + public class XmiElementOriginMap : IXmiElementOriginMap + { + /// + /// Maps element identifiers to their source file URIs + /// + private readonly Dictionary elementToFile = new Dictionary(); + + /// + /// Maps source file URIs to their root namespace identifiers + /// + private readonly Dictionary fileToRootNamespace = new Dictionary(); + + /// + /// Registers the source file for a given element + /// + /// The identifier of the element + /// The of the source XMI file + public void Register(Guid elementId, Uri sourceFile) + { + this.elementToFile[elementId] = sourceFile; + } + + /// + /// Gets the source file for a given element + /// + /// The identifier of the element + /// The of the source file, or null if not tracked + public Uri GetSourceFile(Guid elementId) + { + return this.elementToFile.TryGetValue(elementId, out var sourceFile) ? sourceFile : null; + } + + /// + /// Gets all element identifiers that were deserialized from the given source file + /// + /// The of the source XMI file + /// An of element identifiers + public IEnumerable GetElementsInFile(Uri sourceFile) + { + return this.elementToFile.Where(kvp => kvp.Value == sourceFile).Select(kvp => kvp.Key); + } + + /// + /// Gets all source files that have been registered + /// + /// An of source file URIs + public IEnumerable GetAllSourceFiles() + { + return this.elementToFile.Values.Distinct(); + } + + /// + /// Registers the root namespace identifier for a given source file + /// + /// The of the source XMI file + /// The of the root namespace element + public void RegisterRootNamespace(Uri sourceFile, Guid rootNamespaceId) + { + this.fileToRootNamespace[sourceFile] = rootNamespaceId; + } + + /// + /// Gets the root namespace identifier for a given source file + /// + /// The of the source XMI file + /// The of the root namespace, or if not registered + public Guid GetRootNamespaceId(Uri sourceFile) + { + return this.fileToRootNamespace.TryGetValue(sourceFile, out var rootNamespaceId) ? rootNamespaceId : Guid.Empty; + } + } +}