/// <summary>
 /// Creates a new crawler API instance.
 /// </summary>
 /// <param name="config">The crawler configuration.</param>
 /// <param name="database">The database configuration.</param>
 /// <param name="log">The crawler log.</param>
 /// <param name="status">The crawler status.</param>
 public CrawlerApi(CrawlerConfig config, DbConfig database, Logger log, ApplicationStatus status)
 {
     this.config = config;
     this.database = database;
     this.log = log;
     this.status = status;
 }
        /// <summary>
        /// Creates a new crawer global object, based on a configuration from the specified root registry key.
        /// </summary>
        /// <param name="rootKey">The root registry key.</param>
        /// <param name="rootPath">The root registry path.</param>
        public Crawler(RegistryKey rootKey, string rootPath)
        {
            // Create the configuration.
            this.config = new CrawlerConfig(rootKey, rootPath);

            // Create the crawler events.
            this.events = new CrawlerEvents();

            // Create the logger.
            this.log = new Logger(this.config.LogFileName);

            // Create the database servers.
            this.dbConfig = new DbConfig(this, rootKey, rootPath + @"\Database");

            // Create the PlanetLab configuration.
            this.plConfig = new PlConfig(rootKey, rootPath + @"\PlanetLab");

            // Create the YouTube configuration.
            this.ytConfig = new YtConfig(this.config);

            // Create the status.
            this.status = new ApplicationStatus();

            // Create the comments.
            this.comments = new CrawlerComments(this.config);

            // Create the crawler spiders.
            this.spiders = new Spiders(this);

            // Create the crawler API.
            this.api = new CrawlerApi(this.config, this.dbConfig, this.log, this.status);

            // Create the toolbox.
            this.toolbox = new Toolbox(this, rootKey, rootPath + @"\Toolbox");
        }