/*
     * /// <summary>
     * /// Gives us a query string for the sort we want
     * /// </summary>
     * /// <returns></returns>
     * private string SortDirectiveForContentQuery()
     * {
     *  switch(_sort)
     *  {
     *      case Sort.NoSort:
     *          return "";
     *      default:
     *          IwsDiagnostics.Assert(false, "Unknown flow sort");
     *          throw new Exception("Unknown flow sort");
     *  }
     * }
     */
    /// <summary>
    /// Get a page's worth of Flow listings
    /// </summary>
    /// <param name="onlineFlows"></param>
    /// <param name="pageToRequest">Page # we are requesting (1 based)</param>
    /// <param name="totalNumberPages">Total # of pages of data that Server can return us</param>
    private void ExecuteRequest_ForPage(List <SiteFlow> onlineFlows, int pageToRequest, out int totalNumberPages)
    {
        int pageSize = _onlineUrls.PageSize;
        //Create a web request, in including the users logged-in auth information in the request headers
//        var urlQuery = _onlineUrls.Url_FlowsListForUser(_onlineSession, _userIdForContentQuery, _filterToOwnedBy, pageSize, pageToRequest, SortDirectiveForContentQuery());
        var urlQuery = _onlineUrls.Url_FlowsList(_onlineSession, pageSize, pageToRequest);

        _onlineSession.StatusLog.AddStatus("Web request: " + urlQuery, -10);
        var xmlDoc = ResourceSafe_PerformWebRequest_GetXmlDocument(urlQuery, "get flows list");

        //Get all the flow nodes
        var nsManager = XmlHelper.CreateTableauXmlNamespaceManager("iwsOnline");
        var flows     = xmlDoc.SelectNodes("//iwsOnline:flow", nsManager);

        //Get information for each of the data sources
        foreach (XmlNode itemXml in flows)
        {
            try
            {
                var ds = new SiteFlow(itemXml);
                onlineFlows.Add(ds);
            }
            catch
            {
                AppDiagnostics.Assert(false, "Flow parse error");
                _onlineSession.StatusLog.AddError("Error parsing flow: " + itemXml.InnerXml);
            }
        } //end: foreach

        //-------------------------------------------------------------------
        //Get the updated page-count
        //-------------------------------------------------------------------
        totalNumberPages = DownloadPaginationHelper.GetNumberOfPagesFromPagination(
            xmlDoc.SelectSingleNode("//iwsOnline:pagination", nsManager),
            pageSize);
    }
    /// <summary>
    /// Update the owner of a single flow
    /// </summary>
    /// <param name="siteSignIn"></param>
    /// <param name="contentItem"></param>
    /// <param name="userOldOwner"></param>
    /// <param name="userNewOwner"></param>
    private void Execute_ProvisionOwnership_SingleUserChange_SingleFlow_inner(TableauServerSignIn siteSignIn, SiteFlow contentItem, SiteUser userOldOwner, SiteUser userNewOwner)
    {
        var updateContentOwner = new SendUpdateFlowOwner(siteSignIn, contentItem.Id, userNewOwner.Id);

        updateContentOwner.ExecuteRequest();

        CSVRecord_ContentOwnershipModified("flow", contentItem.Name, userOldOwner.Name, userNewOwner.Name);
    }
    /// <summary>
    /// Change the ownership for a single Flow
    /// </summary>
    /// <param name="contentItem"></param>
    /// <param name="userOldOwner"></param>
    /// <param name="userNewOwner"></param>
    private void Execute_ProvisionOwnership_SingleUserChange_SingleFlow(TableauServerSignIn siteSignIn, SiteFlow contentItem, SiteUser userOldOwner, SiteUser userNewOwner)
    {
        try
        {
            Execute_ProvisionOwnership_SingleUserChange_SingleFlow_inner(siteSignIn, contentItem, userOldOwner, userNewOwner);
        }
        catch (Exception ex)
        {
            _statusLogs.AddError("Error attempting to change content ownership, "
                                 + "flow: " + contentItem.Name
                                 + "from: " + userOldOwner.Name
                                 + ", to:" + userNewOwner.Name
                                 + ", error: " + ex.ToString());

            CSVRecord_ErrorUpdatingContentOwnership("flow", contentItem.Name, userOldOwner.Name, userNewOwner.Name, ex.Message);
        }
    }