protected Source GetCurrentSource(Microsoft.SharePoint.SPSite site, SearchResultDefinition definition)
        {
            FederationManager federationManager = null;
            SearchObjectOwner searchOwner = null;

            return GetCurrentSource(site, definition, out federationManager, out searchOwner);
        }
        protected Source GetCurrentSource(Microsoft.SharePoint.SPSite site, SearchResultDefinition definition,
            out FederationManager federationManager,
            out SearchObjectOwner searchOwner)
        {
            var context = SPServiceContext.GetContext(site);
            var searchAppProxy = context.GetDefaultProxy(typeof(SearchServiceApplicationProxy)) as SearchServiceApplicationProxy;

            federationManager = new FederationManager(searchAppProxy);
            searchOwner = new SearchObjectOwner(SearchObjectLevel.SPSite, site.RootWeb);

            return federationManager.GetSourceByName(definition.Name, searchOwner);
        }
        private void DeploySearchResult(object modelHost, Microsoft.SharePoint.SPSite site, SearchResultDefinition definition)
        {
            FederationManager federationManager = null;
            SearchObjectOwner searchOwner = null;

            var currentSource = GetCurrentSource(site, definition, out federationManager, out searchOwner);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model = null,
                EventType = ModelEventType.OnProvisioning,
                Object = currentSource,
                ObjectType = typeof(Source),
                ObjectDefinition = definition,
                ModelHost = modelHost
            });

            if (currentSource == null)
            {
                currentSource = federationManager.CreateSource(searchOwner);
                currentSource.Name = definition.Name;

                if (definition.ProviderId.HasValue)
                    currentSource.ProviderId = definition.ProviderId.Value;
                else
                    currentSource.ProviderId = GetProviderByName(federationManager, definition.ProviderName).Id;
            }

            currentSource.Description = definition.Description ?? string.Empty;
            currentSource.CreateQueryTransform(new QueryTransformProperties(), definition.Query);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model = null,
                EventType = ModelEventType.OnProvisioned,
                Object = currentSource,
                ObjectType = typeof(Source),
                ObjectDefinition = definition,
                ModelHost = modelHost
            });

            currentSource.Commit();

            if (definition.IsDefault)
                federationManager.UpdateDefaultSource(currentSource.Id, searchOwner);
        }
 public static ModelNode AddSearchResult(this ModelNode model, SearchResultDefinition definition, Action<ModelNode> action)
 {
     return model.AddDefinitionNode(definition, action);
 }
 public static ModelNode AddSearchResult(this ModelNode model, SearchResultDefinition definition)
 {
     return AddSearchResult(model, definition, null);
 }