public void AddToContext(LogicalModel.ContextContainer logicalcontext, XbrlContext xbrlcontext) { var context = new LogicalModel.InstanceContext(); context.ID = xbrlcontext.ID; if (!logicalcontext.Entitites.ContainsKey(xbrlcontext.Entity.ID)) { logicalcontext.Entitites.Add(xbrlcontext.Entity.ID, xbrlcontext.Entity); } context.Entity = logicalcontext.Entitites[xbrlcontext.Entity.ID]; context.EntityID = xbrlcontext.Entity.ID; if (!logicalcontext.Periods.ContainsKey(xbrlcontext.Period.ID)) { logicalcontext.Periods.Add(xbrlcontext.Period.ID, xbrlcontext.Period); } context.Period = logicalcontext.Periods[xbrlcontext.Period.ID]; context.PeriodID = xbrlcontext.Period.ID; if (xbrlcontext.Scenario != null) { foreach (var dim in xbrlcontext.Scenario.Dimensions) { if (!logicalcontext.Parts.ContainsKey(dim.DomainMemberFullName)) { logicalcontext.Parts.Add(dim.DomainMemberFullName, dim); } context.Dimensions.Add(logicalcontext.Parts[dim.DomainMemberFullName]); } } logicalcontext.Items.Add(context.ID, context); }
private void FixContextNamespaces(LogicalModel.InstanceContext ct, XmlNamespaceManager nsm, Dictionary <string, string> domainnsdictionary, List <string> dimensionnamespaces, StringBuilder logger) { var sb = new StringBuilder(); foreach (var dim in ct.Dimensions) { var dparts = dim.DimensionItem.Split(':'); if (Utilities.Xml.Namespaces.ContainsKey(dparts[0])) { var dimnsuri = Utilities.Xml.Namespaces[dparts[0]]; var dimelement = Taxonomy.DimensionItems.FirstOrDefault(i => i.NamespaceURI == dimnsuri); dim.DimensionItem = string.Format("{0}:{1}", dimelement.Namespace, dparts[1]); if (dim.IsTyped) { var parts = dim.Domain.Split(':'); var nsuri = Utilities.Xml.Namespaces[parts[0]]; var tdecontainer = this.Taxonomy.TypedDimensions.FirstOrDefault(i => i.Value.FirstOrDefault(t => t.NamespaceURI == nsuri) != null); var tde = tdecontainer.Value.FirstOrDefault(t => t.NamespaceURI == nsuri); dim.Domain = string.Format("{0}:{1}", tde.Namespace, parts[1]); } else { if (!domainnsdictionary.ContainsKey(dim.Domain)) { var domainelement = this.Taxonomy.SchemaElements.FirstOrDefault(i => i.NamespaceURI == Utilities.Xml.Namespaces[dim.Domain]); domainnsdictionary.Add(dim.Domain, domainelement.Namespace); } dim.Domain = domainnsdictionary[dim.Domain]; } } else { sb.Append(String.Format("{0},", dim.DimensionItem)); } } if (sb.Length > 0) { sb.Insert(0, String.Format("Context: {0} Dimensions: ", ct.ID)); sb.Append("; "); logger.Append(sb.ToString()); } ct.Dimensions = ct.Dimensions.OrderBy(i => i.DomainMemberFullName, StringComparer.Ordinal).ToList(); }