protected bool ScanDirByPattern(string dir, bool IsPrimary, DiscoverySearchPattern[] patterns)
 {
     DirectoryInfo physicalDir = this.GetPhysicalDir(dir);
     if (physicalDir == null)
     {
         return false;
     }
     bool traceVerbose = System.ComponentModel.CompModSwitches.DynamicDiscoverySearcher.TraceVerbose;
     bool flag = false;
     for (int i = 0; i < patterns.Length; i++)
     {
         foreach (FileInfo info2 in physicalDir.GetFiles(patterns[i].Pattern))
         {
             if ((info2.Attributes & FileAttributes.Directory) == 0)
             {
                 bool flag2 = System.ComponentModel.CompModSwitches.DynamicDiscoverySearcher.TraceVerbose;
                 if (string.Compare(info2.Name, this.fileToSkipFirst, StringComparison.OrdinalIgnoreCase) != 0)
                 {
                     string str = this.MakeResultPath(dir, info2.Name);
                     this.filesFound.Add(str);
                     this.discoDoc.References.Add(patterns[i].GetDiscoveryReference(str));
                     flag = true;
                 }
             }
         }
     }
     return (IsPrimary && flag);
 }
        // -------------------------------------------------------------------------------
        // Invokes searching by patterns in current dir. If needed, initiates further search in subdirectories.
        protected void ScanDirectory(string directory)
        {
            if (CompModSwitches.DynamicDiscoverySearcher.TraceVerbose)
            {
                Debug.WriteLine("DynamicDiscoSearcher.ScanDirectory(): directory=" + directory);
            }
            if (IsExcluded(directory))                  // what name is meant here?
            {
                return;
            }

            bool primaryFound = ScanDirByPattern(directory, true /*primary*/, PrimarySearchPattern);

            if (!primaryFound)
            {
                if (!IsVirtualSearch)
                {
                    ScanDirByPattern(directory, false /*secondary*/, SecondarySearchPattern);
                }
                else
                {
                    // We restrict second stage of a virtual discovery only to static .disco documents
                    // We assume that starting directory does not need a second stage
                    if (subDirLevel != 0)
                    {
                        DiscoverySearchPattern[] staticDiscoPattern = new DiscoverySearchPattern[] { new DiscoveryDocumentLinksPattern() };
                        ScanDirByPattern(directory, false /*secondary*/, staticDiscoPattern);
                    }
                }

                if (IsVirtualSearch && subDirLevel > 0)
                {
                    return;                         // stop search in subdir levels deeper than 1 for virtual search
                }
                subDirLevel++;
                fileToSkipFirst = "";               // do not skip this file on lower levels
                SearchSubDirectories(directory);    // search deeper (indirect recursion)
                subDirLevel--;
            }
        }
 protected void ScanDirectory(string directory)
 {
     bool traceVerbose = System.ComponentModel.CompModSwitches.DynamicDiscoverySearcher.TraceVerbose;
     if (!this.IsExcluded(directory) && !this.ScanDirByPattern(directory, true, this.PrimarySearchPattern))
     {
         if (!this.IsVirtualSearch)
         {
             this.ScanDirByPattern(directory, false, this.SecondarySearchPattern);
         }
         else if (this.subDirLevel != 0)
         {
             DiscoverySearchPattern[] patterns = new DiscoverySearchPattern[] { new DiscoveryDocumentLinksPattern() };
             this.ScanDirByPattern(directory, false, patterns);
         }
         if (!this.IsVirtualSearch || (this.subDirLevel <= 0))
         {
             this.subDirLevel++;
             this.fileToSkipFirst = "";
             this.SearchSubDirectories(directory);
             this.subDirLevel--;
         }
     }
 }
        protected void ScanDirectory(string directory)
        {
            bool traceVerbose = System.ComponentModel.CompModSwitches.DynamicDiscoverySearcher.TraceVerbose;

            if (!this.IsExcluded(directory) && !this.ScanDirByPattern(directory, true, this.PrimarySearchPattern))
            {
                if (!this.IsVirtualSearch)
                {
                    this.ScanDirByPattern(directory, false, this.SecondarySearchPattern);
                }
                else if (this.subDirLevel != 0)
                {
                    DiscoverySearchPattern[] patterns = new DiscoverySearchPattern[] { new DiscoveryDocumentLinksPattern() };
                    this.ScanDirByPattern(directory, false, patterns);
                }
                if (!this.IsVirtualSearch || (this.subDirLevel <= 0))
                {
                    this.subDirLevel++;
                    this.fileToSkipFirst = "";
                    this.SearchSubDirectories(directory);
                    this.subDirLevel--;
                }
            }
        }
        // -------------------------------------------------------------------------------
        // Looks in a physical directory for a file matching whatever the configured pattern is.
        // Returns: 'true' if primary file has been found (and added to Discovery References).
        protected bool ScanDirByPattern(string dir, bool IsPrimary, DiscoverySearchPattern[] patterns) {

            DirectoryInfo directory = GetPhysicalDir(dir);              // comment here
            if ( directory == null )
                return false;
            if ( CompModSwitches.DynamicDiscoverySearcher.TraceVerbose )
                Debug.WriteLine( "= DynamicDiscoSearcher.ScanDirByPattern(): dir=" + dir + "  Phys.dir=" + directory.Name);

            bool isFileFound = false;
            for (int i = 0; i < patterns.Length; i++) {
                FileInfo[] files = directory.GetFiles(patterns[i].Pattern);             // search in dir

                foreach (FileInfo file in files) {

                    if ((file.Attributes & FileAttributes.Directory) == 0) {

                        if ( CompModSwitches.DynamicDiscoverySearcher.TraceVerbose ) Debug.WriteLine( "=== DynamicDiscoSearcher.ScanDirByPattern(): file.Name=" + file.Name + "  fileToSkipFirst=" + fileToSkipFirst);

                        // first skip given (i.e. starting) file
                        if ( String.Compare(file.Name, fileToSkipFirst, StringComparison.OrdinalIgnoreCase) == 0 ) {       // ignore case compare
                            continue;
                            }

                        string resultName = MakeResultPath(dir, file.Name);
                        filesFound.Add( resultName );
                        discoDoc.References.Add(patterns[i].GetDiscoveryReference(resultName));
                        isFileFound = true;
                    }
                }

            }

        return (IsPrimary && isFileFound);
        }
        // -------------------------------------------------------------------------------
        // Invokes searching by patterns in current dir. If needed, initiates further search in subdirectories.
        protected void ScanDirectory(string directory) {
            if ( CompModSwitches.DynamicDiscoverySearcher.TraceVerbose ) Debug.WriteLine( "DynamicDiscoSearcher.ScanDirectory(): directory=" + directory);
            if ( IsExcluded(directory) )                // what name is meant here?
                return;

            bool primaryFound = ScanDirByPattern(directory, true /*primary*/, PrimarySearchPattern);

            if (!primaryFound) {
                if (!IsVirtualSearch ) {
                    ScanDirByPattern(directory, false /*secondary*/, SecondarySearchPattern);
                } else {
                    // We restrict second stage of a virtual discovery only to static .disco documents
                    // We assume that starting directory does not need a second stage
                    if (subDirLevel != 0) {
                        DiscoverySearchPattern[] staticDiscoPattern = new DiscoverySearchPattern[] { new DiscoveryDocumentLinksPattern() };
                        ScanDirByPattern(directory, false /*secondary*/, staticDiscoPattern);
                    }
                }

                if ( IsVirtualSearch && subDirLevel > 0 )
                    return;                         // stop search in subdir levels deeper than 1 for virtual search

                subDirLevel++;
                fileToSkipFirst = "";               // do not skip this file on lower levels
                SearchSubDirectories(directory);    // search deeper (indirect recursion)
                subDirLevel--;
            }
        }