Beispiel #1
0
        private void LoadReferences( out int numErrors )
        {
            numErrors = 0;

            if ( dependantTaxonomies.Count == 0 )
            {
                int errs = LoadDependantTaxonomies(this.schemaPath);
                numErrors += errs;
                numRefErrors += errs;
            }

            if ( referenceFile == null )
            {
                referenceFile = GetLinkbaseReference( TARGET_LINKBASE_URI + REFERENCE_ROLE );
            }
            int errors = 0;

            if ( referenceTable == null )
            {
                referenceTable = new Hashtable();
            }

            if ( referenceFile != null )
            {
                foreach ( string refFile in referenceFile )
                {
                    Reference reference = new Reference();
                    reference.OwnerHandle = OwnerHandle;
                    reference.loadingTaxonomy = this.GetLoadingTaxonomy();
                    reference.PromptUser = this.PromptUser;

                    if ( refFile != null )
                    {
                        reference.Load( refFile, out numErrors );
                        if (IsAucentExtension && skipAucentExtensions && !this.innerTaxonomy &&
                            reference.IsDocumentCreatedByRivet())
                        {
                            //if this is a top level aucent extension taxonomy and ...
                            //if the skipAucentExtensions is set to true ... we want to load just the no rivet created files...
                            //as we will merge the rivet created files later....
                            continue ;
                        }
                        if ( reference.ErrorList.Count > 0 )
                        {
                            for ( int i = 0; i < reference.ErrorList.Count; i++ )
                                Common.WriteError( "XBRLParser.Error.Exception", validationErrors,
                                    SchemaFile + ": REFERENCE_ROLE Error: " + reference.ErrorList[i] );
                        }

                        reference.Parse( out errors );
                        if ( errors > 0 )
                        {
                            numErrors += errors;
                            errorList.AddRange( reference.ErrorList );
                            numRefErrors += errors;
                        }

                        LinkbaseFileInfo refLinkbaseInfo = new LinkbaseFileInfo();
                        refLinkbaseInfo.LinkType = LinkbaseFileInfo.LinkbaseType.Reference;
                        refLinkbaseInfo.Filename = refFile;
                        refLinkbaseInfo.XSDFileName = schemaFile;

                        this.linkbaseFileInfos.Add(refLinkbaseInfo);

                    }

                    if ( reference.ReferencesTable != null )
                    {
                        IDictionaryEnumerator enumer = reference.ReferencesTable.GetEnumerator();
                        foreach( ReferenceLocator otherRL in reference.ReferencesTable.Values )
                        {
                            if (referenceTable.Contains(otherRL.HRef))
                            {
                                //TODO: add merge code similar to label locators
                                int i = 0; ++i;

                                ReferenceLocator rl = (ReferenceLocator)referenceTable[otherRL.HRef];
                                rl.Merge( otherRL );
                            }
                            else
                            {
                                referenceTable[otherRL.HRef] = otherRL;
                            }
                        }
                    }
                }
            }

            if ( !innerTaxonomy )
            {
                //append the references to the root level referenceTable
                foreach ( Taxonomy t in dependantTaxonomies )
                {
                    if ( t.referenceTable != null && t.referenceTable.Count > 0 )
                    {
                        errors = 0;
                        // now append the references
                        IDictionaryEnumerator enumer = t.referenceTable.GetEnumerator();
                        while ( enumer.MoveNext() )
                        {
                            if ( referenceTable.ContainsKey( enumer.Key ) )
                            {
                                ++numWarnings;
                                Common.WriteWarning( "XBRLParser.Warning.DuplicateReference", errorList, enumer.Key.ToString() );
                                continue;
                            }

                            // otherwise, add it
                            referenceTable[enumer.Key] = enumer.Value;
                        }
                    }
                }
            }
        }