public void ActivateFeaturesInWeb(SPWeb web, Forcefulness forcefulness)
        {
            _forcefulness = forcefulness;
            Location webLoc = LocationManager.GetLocation(web);

            foreach (Feature feature in _featureset.WebFeatures)
            {
                PerformAction(webLoc, web.Features, feature);
            }
        }
        /// <summary>activate features in the whole farm</summary>
        public void TraverseActivateFeaturesInFarm(Forcefulness forcefulness)
        {
            _forcefulness = forcefulness;
            ActivateFeaturesInFarm();

            foreach (WebAppEnumerator.WebAppInfo webappInfo  in WebAppEnumerator.GetAllWebApps())
            {
                TraverseActivateFeaturesInWebApplication(webappInfo.WebApp, forcefulness);
            }
        }
        public void TraverseActivateFeaturesInSiteCollection(SPSite site, Forcefulness forcefulness)
        {
            _forcefulness = forcefulness;
            ActivateFeaturesInSiteCollection(site);

            if (_featureset.WebFeatureCount == 0)
            {
                return;
            }
            foreach (SPWeb web in site.AllWebs)
            {
                try
                {
                    ActivateFeaturesInWeb(web, forcefulness);
                }
                finally
                {
                    web.Dispose();
                }
            }
        }
        public void TraverseActivateFeaturesInWebApplication(SPWebApplication webapp, Forcefulness forcefulness)
        {
            _forcefulness = forcefulness;
            ActivateFeaturesInWebApp(webapp);

            if (_featureset.SiteCollectionFeatureCount == 0 &&
                _featureset.WebFeatureCount == 0)
            {
                return;
            }

            foreach (SPSite site in webapp.Sites)
            {
                try
                {
                    TraverseActivateFeaturesInSiteCollection(site, forcefulness);
                }
                finally
                {
                    site.Dispose();
                }
            }
        }