public (string, string) ComputeUniqueName(ParentChildRelationHierarchy hierarchy, ParentChildRelation relation) { var mapping = _mappingsMap[relation.Child.GetType()]; var sourceName = mapping.GetKeyForInstance(relation.Child); var sourceTypeName = mapping.ArdoqComponentTypeName; var localName = sourceName + " " + sourceTypeName; if (relation.Parent == null) { return(null, localName); } var parentRelations = hierarchy.GetAllParentChildRelations().Where(rel => rel.Child == relation.Parent); if (parentRelations.Count() > 1) { var parentMapping = _mappingsMap[relation.Parent?.GetType()]; var parentType = parentMapping.ArdoqComponentTypeName; var parentName = parentMapping.GetKeyForInstance(relation.Parent); throw new Exception($"Multiple elements found matching type={parentType} with key={parentName}"); } ParentChildRelation parentRelation = hierarchy.GetAllParentChildRelations().SingleOrDefault(rel => rel.Child == relation.Parent); var parentUniqueName = parentRelation.ChildUniqueName ?? ComputeUniqueName(hierarchy, parentRelation).Item2; return(parentUniqueName, parentUniqueName + " -> " + localName); }
private void ComputeUniqueNames(ParentChildRelationHierarchy hierarchy) { foreach (var rel in hierarchy.GetAllParentChildRelations()) { var uniqueNames = ComputeUniqueName(hierarchy, rel); rel.ParentUniqueName = uniqueNames.Item1; rel.ChildUniqueName = uniqueNames.Item2; } }