private void FinalizeReferenceRelationshipMerge(ModelProtoElement protoElement, ModelProtoGroupMerger groupMerger, bool bCreateSInfo) { ReferenceRelationship refRel = this.Store.ElementDirectory.FindElement(groupMerger.GetIdMapping(protoElement.ElementId)) as ReferenceRelationship; if (bCreateSInfo) { SerializationDomainRelationshipAddRule.OnReferenceRelationshipAdded(refRel); } if (refRel == null) { return; } ModelTreeHelper.AddNewReferenceRelationship(refRel, refRel.Source.RolePlayer as DomainClass, refRel.Target.RolePlayer); }
private static void FixUpSerializedDomainModel(ModelContext model) { foreach (DomainClass domainClass in model.Classes) { if (domainClass.IsDomainModel) { SerializedDomainModel child = new SerializedDomainModel(domainClass.Store); child.DomainClass = domainClass; child.SerializationName = domainClass.SerializationName; model.SerializationModel.SerializedDomainModel = child; SerializationHelper.AddSerializationDomainProperties(domainClass.Store, domainClass); } else { SerializationDomainClassAddRule.OnDomainClassAdded(domainClass); domainClass.SerializedDomainClass.SerializationName = domainClass.SerializationName; } } foreach (DomainRelationship relationship in model.Relationships) { if (relationship is EmbeddingRelationship) { SerializationDomainRelationshipAddRule.OnEmbeddingRelationshipAdded(relationship as EmbeddingRelationship); (relationship as EmbeddingRelationship).SerializedEmbeddingRelationship.SerializationName = relationship.SerializationName; } else { SerializationDomainRelationshipAddRule.OnReferenceRelationshipAdded(relationship as ReferenceRelationship); (relationship as ReferenceRelationship).SerializedReferenceRelationship.SerializationName = relationship.SerializationName; } } foreach (DomainClass domainClass in model.Classes) { SerializationHelper.UpdateSerializationDomainProperties(domainClass.Store, domainClass.SerializedDomainClass, domainClass); SerializationHelper.UpdateSerializationDomainRoles(domainClass.Store, domainClass.SerializedDomainClass, domainClass); foreach (DomainProperty p in domainClass.Properties) { p.SerializedDomainProperty.IsSerializationNameTracking = TrackingEnum.True; } } foreach (DomainRelationship relationship in model.Relationships) { if (relationship is EmbeddingRelationship) { SerializationHelper.UpdateSerializationDomainProperties(relationship.Store, (relationship as EmbeddingRelationship).SerializedEmbeddingRelationship, relationship); } else { SerializationHelper.UpdateSerializationDomainProperties(relationship.Store, (relationship as ReferenceRelationship).SerializedReferenceRelationship, relationship); } foreach (DomainProperty p in relationship.Properties) { p.SerializedDomainProperty.IsSerializationNameTracking = TrackingEnum.True; } } // correct IsSerializationNameTracking values foreach (DomainClass domainClass in model.Classes) { if (domainClass.SerializationName != domainClass.Name) { domainClass.IsSerializationNameTracking = TrackingEnum.False; } domainClass.SerializedDomainClass.IsSerializationNameTracking = domainClass.IsSerializationNameTracking; foreach (DomainProperty p in domainClass.Properties) { if (p.Name != p.SerializationName) { p.IsSerializationNameTracking = TrackingEnum.False; } p.SerializedDomainProperty.IsSerializationNameTracking = p.IsSerializationNameTracking; if (p.Name == "DomainFilePath") { p.SerializedDomainProperty.OmitProperty = true; } } } foreach (DomainRelationship relationship in model.Relationships) { if (relationship is EmbeddingRelationship) { EmbeddingRelationship emb = relationship as EmbeddingRelationship; if (emb.SerializationName != emb.Name) { emb.IsSerializationNameTracking = TrackingEnum.False; } emb.SerializedEmbeddingRelationship.IsSerializationNameTracking = emb.IsSerializationNameTracking; } else { ReferenceRelationship refRel = relationship as ReferenceRelationship; if (refRel.SerializationName != refRel.Name) { refRel.IsSerializationNameTracking = TrackingEnum.False; } refRel.SerializedReferenceRelationship.IsSerializationNameTracking = refRel.IsSerializationNameTracking; } foreach (DomainProperty p in relationship.Properties) { if (p.Name != p.SerializationName) { p.IsSerializationNameTracking = TrackingEnum.True; } p.SerializedDomainProperty.IsSerializationNameTracking = p.IsSerializationNameTracking; } } }