Example #1
0
        protected ICollection <SiteWorkbook> DownloadWorkbooksList()
        {
            var workbooksList = new DownloadWorkbooksList(Urls, Login, HttpClientFactory);

            workbooksList.ExecuteRequest();
            return(workbooksList.Workbooks);
        }
    /// <summary>
    /// For this type of content, change the ownership from one user to another
    /// </summary>
    /// <param name="siteSignIn"></param>
    /// <param name="thisOwnershipChange"></param>
    /// <param name="userOldOwner"></param>
    /// <param name="userNewOwner"></param>
    private void Execute_ProvisionOwnership_SingleUserChange_Workbooks(TableauServerSignIn siteSignIn, SiteUser userOldOwner, SiteUser userNewOwner)
    {
        //Get the list of workbooks (if any) owned by the old user
        var inventoryDownloader = new DownloadWorkbooksList(siteSignIn, userOldOwner.Id, true);

        inventoryDownloader.ExecuteRequest();
        var listContent = inventoryDownloader.Workbooks;

        if ((listContent == null) || (listContent.Count < 1))
        {
            _statusLogs.AddStatus("No work to do. No workbooks owned by: " + userOldOwner.Name);
            return;
        }

        //Change the ownership of each of these content items
        foreach (var contentItem in listContent)
        {
            if (string.Compare(contentItem.OwnerId, userOldOwner.Id, true) == 0)
            {
                Execute_ProvisionOwnership_SingleUserChange_SingleWorkbook(siteSignIn, contentItem, userOldOwner, userNewOwner);
            }
            else
            {
                IwsDiagnostics.Assert(false, "201202-607: Expected not to have content not owned by user");
            }
        }
    }
Example #3
0
        public void DownloadWorkbooksTest()
        {
            var url = new TableauServerUrls(ServerProtocol.Http, "10.107.0.240:8000", "ITCostSurvey", 10, ServerVersion.Server9);

            var signIn = new TableauServerSignIn(
                url, "public",
                "tableau1user%", new TaskStatusLogs());

            signIn.ExecuteRequest();
            var a =
                new DownloadWorkbooksList(url, signIn);

            a.ExecuteRequest();
            Assert.AreEqual(2, a.Workbooks.Count);

            var b = new DownloadProjectsList(url, signIn);

            b.ExecuteRequest();
            Assert.AreEqual(1, b.Projects.Count());

            signIn = new TableauServerSignIn(
                new TableauServerUrls(ServerProtocol.Http, "10.107.0.240:8000", "ITCostSurvey", 10, ServerVersion.Server9),
                "tableauAdmin",
                "ta1user%", new TaskStatusLogs());
            signIn.ExecuteRequest();
            a =
                new DownloadWorkbooksList(
                    new TableauServerUrls(ServerProtocol.Http, "10.107.0.240:8000", "ITCostSurvey", 10, ServerVersion.Server9),
                    signIn);

            a.ExecuteRequest();
            Assert.AreEqual(4, a.Workbooks.Count);

            foreach (var workbook in a.Workbooks)
            {
                var viewQuery = new DownloadViewsForWorkbookList(workbook.Id, url, signIn);
                viewQuery.ExecuteRequest();
                Assert.AreEqual(1, viewQuery.Views.Count);
                foreach (var view in viewQuery.Views)
                {
                    var thumbnailQuery = new DownloadView(url, signIn);
                    var result         = thumbnailQuery.GetPreviewImage(workbook.Id, view.Id);
                    Assert.AreNotEqual(0, result.Length);
                }
            }

            b = new DownloadProjectsList(url, signIn);
            b.ExecuteRequest();
            Assert.AreEqual(1, b.Projects.Count());

            var siteViews = new DownloadViewsForSiteList(url, signIn);

            siteViews.ExecuteRequest();
            Assert.AreEqual(0, siteViews.Views.Count);
        }
    /// <summary>
    /// Queries for the set of workbooks that the specified user can access
    /// </summary>
    /// <param name="signIn"></param>
    /// <param name="queryForUserId"></param>
    /// <returns></returns>
    public static DownloadWorkbooksList CreateAndExecute(TableauServerSignIn signIn, string queryForUserId)
    {
        if (!RegExHelper.IsValidIdTableauContentId(queryForUserId))
        {
            throw new Exception("1030-910: User id syntax invalid: " + queryForUserId);
        }

        var downloader = new DownloadWorkbooksList(signIn, queryForUserId);

        downloader.ExecuteRequest();
        return(downloader);
    }
Example #5
0
    /// <summary>
    /// Download the data sources
    /// </summary>
    /// <param name="onlineLogin"></param>
    private void Execute_DownloadWorkbooksList(TableauServerSignIn onlineLogin)
    {
        _statusLog.AddStatusHeader("Download workbooks list");
        try
        {
            //Get the list of workbooks
            var workbooks = new DownloadWorkbooksList(_onlineUrls, onlineLogin);
            workbooks.ExecuteRequest();

            //Store them in our object
            _downloadedList_Workbooks = workbooks.Workbooks;
        }
        catch (Exception exDownload)
        {
            _statusLog.AddError("Error during workbooks list download, " + exDownload.ToString());
        }
    }
Example #6
0
    /// <summary>
    /// Download the workbooks
    /// </summary>
    /// <param name="onlineLogin">logged in session</param>
    /// <param name="exportToPath">local path to export to</param>
    /// <param name="projectsList">project id/name mapping</param>
    /// <param name="singleProjectIdFilter">if specified, export only from a single project</param>
    /// <param name="exportOnlyWithThisTag">if specified, export only content with this tag</param>
    /// <param name="deleteTagAfterExport">TRUE: Remove the server-side tag from exported content (only valid if we have an export tag)</param>
    /// <param name="generateInfoFile">TRUE: Each downloaded workbook will get an information file generated that has additional metadata about it</param>
    /// <param name="siteUsers"> If not NULL, then this will get used to look the user name for each downloaded workbook, and safe it into the info file</param>
    private void Execute_DownloadWorkbooks(
        TableauServerSignIn onlineLogin, 
        string exportToPath, 
        IProjectsList projectsList,
        SiteProject singleProjectIdFilter = null,
        string exportOnlyWithThisTag      = null,
        bool deleteTagAfterExport         = false,
        bool generateInfoFile             = false,
        IEnumerable<SiteUser> siteUsers   = null
        )
    {
        var onlineUrls = _onlineUrls;
        _statusLog.AddStatusHeader("Download workbooks");

        //Get the UserID we need to use for the workbooks query.
        var explicitUserId = onlineLogin.UserId; //See if we have a default user id

        //===================================================================================
        //Workbooks...
        //===================================================================================
        ICollection<SiteWorkbook> workbooksList = null;
        try
        {
            var workbooks = new DownloadWorkbooksList(onlineUrls, onlineLogin, explicitUserId);
            //Query for the list of workbook
            workbooks.ExecuteRequest();
            workbooksList = workbooks.Workbooks;

        }
        catch (Exception exWorkbooksList)
        {
            _statusLog.AddError("Error querying for list of workbooks, " + exWorkbooksList.Message.ToString());
            return;
        }

        //No list of workbooks?  Exit.
        if(workbooksList == null)
        {
            _statusLog.AddStatus("Aborting workbooks download");
            return;
        }

        //====================================================================================================
        //Apply filters to the list of content to see if we need to reduce the set of content to be downloaded
        //====================================================================================================
        var filteredList = workbooksList;
        _statusLog.AddStatus("Download workbooks count before filters: " + filteredList.Count.ToString());

        //See if we have a PROJECTS filter to apply to the set of content to be downloaded
        filteredList = FilterProjectMembership<SiteWorkbook>.KeepOnlyProjectMembers(
                            filteredList,
                            singleProjectIdFilter,
                            true);
        _statusLog.AddStatus("Download workbooks count after projects filter: " + filteredList.Count.ToString());

        //See if we have a TAGS filter to apply to the set of content to be downloaded
        filteredList = FilterTagSet<SiteWorkbook>.KeepOnlyTagged(
            filteredList,
            exportOnlyWithThisTag,
            true);
        _statusLog.AddStatus("Download workbooks count after tags filter: " + filteredList.Count.ToString());

        //-----------------------------------------------------------
        //Download the workbooks
        //-----------------------------------------------------------
        var workbookPath = Path.Combine(exportToPath, "workbooks");
        ICollection<SiteWorkbook> successfullExportSet = null;
        FileIOHelper.CreatePathIfNeeded(workbookPath);

        //If we are going to write out metadata for each download, then create the object that lets us look up the owner of each workbook
        KeyedLookup<SiteUser> workbookOwnerLookup = null;
        if ((generateInfoFile) && (siteUsers != null))
        {
            workbookOwnerLookup = new KeyedLookup<SiteUser>(siteUsers);
        }
        //Do the downloads......
        try
        {
            //Create the workbooks downloader
            var workbookDownloads = new DownloadWorkbooks(
                onlineUrls,
                onlineLogin,
                filteredList,
                workbookPath,
                projectsList,
                generateInfoFile,
                workbookOwnerLookup);
            successfullExportSet = workbookDownloads.ExecuteRequest();
        }
        catch (Exception exWorkbooksDownload)
        {
            _statusLog.AddError("Error during workbooks download, " + exWorkbooksDownload.ToString());
        }

        //--------------------------------------------------------------------------------
        //Do we want to remove tags from successfully downloaded content?
        //--------------------------------------------------------------------------------
        if ((successfullExportSet != null) && (deleteTagAfterExport) && (!string.IsNullOrWhiteSpace(exportOnlyWithThisTag)))
        {
            Execute_DeleteTagFromWorkbooks(onlineLogin, successfullExportSet, exportOnlyWithThisTag);
        }
    }
Example #7
0
    /// <summary>
    /// Download the data sources
    /// </summary>
    /// <param name="onlineLogin"></param>
    private void Execute_DownloadWorkbooksList(TableauServerSignIn onlineLogin)
    {
        _statusLog.AddStatusHeader("Download workbooks list");
        try
        {
            //Get the list of workbooks
            var workbooks = new DownloadWorkbooksList(_onlineUrls, onlineLogin);
            workbooks.ExecuteRequest();

            //Store them in our object
            _downloadedList_Workbooks = workbooks.Workbooks;
        }
        catch (Exception exDownload)
        {
            _statusLog.AddError("Error during workbooks list download, " + exDownload.ToString());
        }
    }
Example #8
0
    /// <summary>
    /// Download the workbooks
    /// </summary>
    /// <param name="onlineLogin">logged in session</param>
    /// <param name="exportToPath">local path to export to</param>
    /// <param name="projectsList">project id/name mapping</param>
    /// <param name="singleProjectIdFilter">if specified, export only from a single project</param>
    /// <param name="exportOnlyWithThisTag">if specified, export only content with this tag</param>
    /// <param name="deleteTagAfterExport">TRUE: Remove the server-side tag from exported content (only valid if we have an export tag)</param>
    private void Execute_DownloadWorkbooks(
        TableauServerSignIn onlineLogin,
        string exportToPath,
        IProjectsList projectsList,
        SiteProject singleProjectIdFilter = null,
        string exportOnlyWithThisTag      = null,
        bool deleteTagAfterExport         = false)
    {
        var onlineUrls = _onlineUrls;

        _statusLog.AddStatusHeader("Download workbooks");

        //Get the UserID we need to use for the workbooks query.
        var explicitUserId = onlineLogin.UserId; //See if we have a default user id

        //===================================================================================
        //Workbooks...
        //===================================================================================
        ICollection <SiteWorkbook> workbooksList = null;

        try
        {
            var workbooks = new DownloadWorkbooksList(onlineUrls, onlineLogin, explicitUserId);
            //Query for the list of workbook
            workbooks.ExecuteRequest();
            workbooksList = workbooks.Workbooks;
        }
        catch (Exception exWorkbooksList)
        {
            _statusLog.AddError("Error querying for list of workbooks, " + exWorkbooksList.Message.ToString());
            return;
        }

        //No list of workbooks?  Exit.
        if (workbooksList == null)
        {
            _statusLog.AddStatus("Aborting workbooks download");
            return;
        }

        //====================================================================================================
        //Apply filters to the list of content to see if we need to reduce the set of content to be downloaded
        //====================================================================================================
        var filteredList = workbooksList;

        _statusLog.AddStatus("Download workbooks count before filters: " + filteredList.Count.ToString());

        //See if we have a PROJECTS filter to apply to the set of content to be downloaded
        filteredList = FilterProjectMembership <SiteWorkbook> .KeepOnlyProjectMembers(
            filteredList,
            singleProjectIdFilter,
            true);

        _statusLog.AddStatus("Download workbooks count after projects filter: " + filteredList.Count.ToString());

        //See if we have a TAGS filter to apply to the set of content to be downloaded
        filteredList = FilterTagSet <SiteWorkbook> .KeepOnlyTagged(
            filteredList,
            exportOnlyWithThisTag,
            true);

        _statusLog.AddStatus("Download workbooks count after tags filter: " + filteredList.Count.ToString());

        //-----------------------------------------------------------
        //Download the workbooks
        //-----------------------------------------------------------
        var workbookPath = Path.Combine(exportToPath, "workbooks");
        ICollection <SiteWorkbook> successfullExportSet = null;

        FileIOHelper.CreatePathIfNeeded(workbookPath);
        try
        {
            var workbookDownloads = new DownloadWorkbooks(onlineUrls, onlineLogin, filteredList, workbookPath, projectsList);
            successfullExportSet = workbookDownloads.ExecuteRequest();
        }
        catch (Exception exWorkbooksDownload)
        {
            _statusLog.AddError("Error during workbooks download, " + exWorkbooksDownload.ToString());
        }

        //--------------------------------------------------------------------------------
        //Do we want to remove tags from successfully downloaded content?
        //--------------------------------------------------------------------------------
        if ((successfullExportSet != null) && (deleteTagAfterExport) && (!string.IsNullOrWhiteSpace(exportOnlyWithThisTag)))
        {
            Execute_DeleteTagFromWorkbooks(onlineLogin, successfullExportSet, exportOnlyWithThisTag);
        }
    }
Example #9
0
        public void ViewPdfLinkTest()
        {
            var url = new TableauServerUrls(ServerProtocol.Http, "10.107.0.240:8000", "ITCostSurvey", 10, ServerVersion.Server9);

            var signIn = new TableauServerSignIn(
                url,
                "tableauAdmin",
                "ta1user%", new TaskStatusLogs());

            signIn.ExecuteRequest();
            var workbooks =
                new DownloadWorkbooksList(
                    new TableauServerUrls(ServerProtocol.Http, "10.107.0.240:8000", "ITCostSurvey", 10, ServerVersion.Server9),
                    signIn);

            workbooks.ExecuteRequest();
            var workbook  = workbooks.Workbooks.First();
            var viewQuery = new DownloadViewsForWorkbookList(workbook.Id, url, signIn);

            viewQuery.ExecuteRequest();
            var view         = viewQuery.Views.First();
            var a            = new TrustedUrls(workbook.Name.Replace(" ", ""), view.Name.Replace(" ", ""), url, signIn);
            var exportPdfUrl = a.GetExportPdfUrl();

            Assert.IsFalse(string.IsNullOrEmpty(exportPdfUrl));
            var thumbnailUrl = a.GetPreviewImageUrl();

            Assert.IsFalse(string.IsNullOrEmpty(thumbnailUrl));
            var viewUrl = a.GetTrustedViewUrl();

            Assert.IsFalse(string.IsNullOrEmpty(viewUrl));

            var client = new WebClient();

            var data = client.DownloadData(exportPdfUrl);

            Assert.IsNotNull(data);
            Assert.IsTrue(data.Any());

            data = null;

            var downloadView = new DownloadView(url, signIn);

            data = downloadView.GetPreviewImage(workbook.Id, view.Id);
            Assert.IsNotNull(data);
            Assert.IsTrue(data.Any());

            a.AddViewParameter("Gabba", "1");
            a.AddViewParameter("Hey", "2");

            exportPdfUrl = a.GetExportPdfUrl();
            Assert.IsTrue(exportPdfUrl.Contains("?"));
            Assert.IsTrue(exportPdfUrl.EndsWith("Gabba=1&Hey=2"));

            thumbnailUrl = a.GetPreviewImageUrl();
            Assert.IsTrue(thumbnailUrl.Contains("?"));
            Assert.IsTrue(thumbnailUrl.EndsWith("Gabba=1&Hey=2"));

            a.HideToolbar = true;
            viewUrl       = a.GetTrustedViewUrl();
            Assert.IsTrue(viewUrl.EndsWith("&:toolbar=no"));

            a.HideToolbar = null;
            viewUrl       = a.GetTrustedViewUrl();
            Assert.IsFalse(viewUrl.EndsWith("&:toolbar=no"));

            a.HideToolbar = false;
            viewUrl       = a.GetTrustedViewUrl();
            Assert.IsFalse(viewUrl.EndsWith("&:toolbar=no"));

            a.HideTabs = true;
            viewUrl    = a.GetTrustedViewUrl();
            Assert.IsTrue(viewUrl.EndsWith("&:tabs=no"));

            a.HideTabs = null;
            viewUrl    = a.GetTrustedViewUrl();
            Assert.IsFalse(viewUrl.EndsWith("&:tabs=no"));

            a.HideTabs = false;
            viewUrl    = a.GetTrustedViewUrl();
            Assert.IsFalse(viewUrl.EndsWith("&:tabs=no"));

            a             = new TrustedUrls(workbook.Name.Replace(" ", ""), view.Name.Replace(" ", ""), url, signIn);
            a.HideToolbar = true;
            viewUrl       = a.GetTrustedViewUrl();
            Assert.IsTrue(viewUrl.EndsWith("?:toolbar=no"));

            a.HideToolbar = null;
            viewUrl       = a.GetTrustedViewUrl();
            Assert.IsFalse(viewUrl.EndsWith("?:toolbar=no"));

            a.HideToolbar = false;
            viewUrl       = a.GetTrustedViewUrl();
            Assert.IsFalse(viewUrl.EndsWith("?:toolbar=no"));

            a.HideTabs = true;
            viewUrl    = a.GetTrustedViewUrl();
            Assert.IsTrue(viewUrl.EndsWith("?:tabs=no"));

            a.HideTabs = null;
            viewUrl    = a.GetTrustedViewUrl();
            Assert.IsFalse(viewUrl.EndsWith("?:tabs=no"));

            a.HideTabs = false;
            viewUrl    = a.GetTrustedViewUrl();
            Assert.IsFalse(viewUrl.EndsWith("?:tabs=no"));

            a.HideToolbar = true;
            a.HideTabs    = true;
            viewUrl       = a.GetTrustedViewUrl();
            Assert.IsTrue(viewUrl.EndsWith("?:tabs=no&:toolbar=no"));
        }