public ActionResult Index()
 {
     //Gets authentication
     LoginModel login = (LoginModel)Session.Contents["AuthenticatedUser"];
     CatalogModel catalog = (CatalogModel)Session.Contents["Catalog"];
     CatalogModel model = new CatalogModel();
     if (catalog == null)
     {
         if (login != null)
         {
             model.SRSProxy = CatalogModel.SRSAuthenticate(login.AuthenticationUser);
             model = CatalogModel.GetCatalogItems(login.AuthenticationUser, model.SRSProxy);
             RememberMe(model);
             return View(model);
         }
         else
         {
             LoginModel.ErrorMessage = "Session Expired";
             return RedirectToAction("Login", "Login");
         }
     }
     else
     {
         return View(catalog);
     }
 }
 private void AddReport(FormCollection collection, CatalogModel content, LoginModel login)
 {
     try
     {
         content.ReportItem.FilePath = collection["ReportFilePath"];
         content.ReportItem.Name = collection["ReportName"];
         content.AddReport();
     }
     catch (Exception e)
     {
         content.Error = e;
     }
 }
 private void Delete(LoginModel login, CatalogModel content)
 {
     try
     {
         //Delete item in SRS
         content.DeleteItem(login.AuthenticationUser);
         RefreshCatalog(login, content);
     }
     catch (Exception e)
     {
         throw e;
     }
 }
        private CatalogModel SeletedItem()
        {
            string url = Request.Url.AbsoluteUri;
            string key = url.Substring(url.IndexOf('_'));

            LoginModel login = (LoginModel)Session.Contents["AuthenticatedUser"];
            CatalogModel catalog = (CatalogModel)Session.Contents["Catalog"];
            CatalogModel content = new CatalogModel();

            if (key.Equals("_"))
            {
                //Select Home
                content.Name = "Home";
                content.Path = "/";
                content.ItemType = "Folder";
            }
            else
            {
                //Select other item
                content = CatalogModel.GetItem(catalog.AllItems, key);
                if (content != null)
                {
                    switch (content.ItemType)
                    {
                        case "Report":
                            content.GetReportParameters(login.AuthenticationUser, catalog.SRSProxy);
                            content.GetItemProperty(login.AuthenticationUser);
                            break;

                        case "Folder":
                            content.GetItemProperty(login.AuthenticationUser);
                            break;

                        case "LinkedReport":
                            content.GetReportParameters(login.AuthenticationUser, catalog.SRSProxy);
                            content.GetItemProperty(login.AuthenticationUser);
                            break;

                        case "DataSource":
                            content.GetDataSourceItem(login.AuthenticationUser, catalog.SRSProxy);
                            content.GetItemProperty(login.AuthenticationUser);
                            break;
                    }
                }
                else
                {
                    //Item not found
                }
            }

            catalog.Name = content.Name;
            catalog.ItemType = content.ItemType;
            catalog.Parent = content.Parent;
            catalog.Path = content.Path;
            catalog.ReportParameters = content.ReportParameters;
            catalog.ItemProperties = content.ItemProperties;
            catalog.DataSourceItem = content.DataSourceItem;
            catalog.Result = string.Empty;
            catalog.Error = null;
            return catalog;
        }
 private CatalogModel Run(FormCollection collection, CatalogModel content)
 {
     foreach (var item in content.ReportParameters)
     {
         item.SelectedValue = collection[item.Name];
         if (string.IsNullOrEmpty(item.SelectedValue))
         {
             if (item.ParameterType.ToString().Equals("Float", StringComparison.OrdinalIgnoreCase) || item.ParameterType.ToString().Equals("Integer", StringComparison.OrdinalIgnoreCase))
             {
                 item.SelectedValue = "0";
             }
         }
     }
     content.RunReport(Request.Url.Host);
     return content;
 }
        private bool SaveDatasource(FormCollection collection, CatalogModel content, LoginModel login)
        {
            try
            {
                string address = string.Empty;
                foreach (var item in content.DataSourceItem.itemProperties)
                {
                    item.Value = collection[item.PropertyName];
                }

                if (content.ItemType.Equals("Folder"))
                {
                    address = content.Path.Substring(content.Path.IndexOf('/'));
                }
                else
                {
                    address = content.Parent.Substring(content.Parent.IndexOf('/'));
                }

                content.SaveDataSource(login.AuthenticationUser, address);
                RefreshCatalog(login, content);
                return true;
            }
            catch (Exception e)
            {
                content.Error = e;
                return false;
            }
        }
        private void RememberMe(CatalogModel model)
        {
            //Add to cookie
            HttpCookie webcookie = new HttpCookie(model.SRSProxy.AuthCookie.Name, model.SRSProxy.AuthCookie.Value);
            webcookie.Expires = DateTime.MaxValue;
            Response.AppendCookie(webcookie);

            //Add to session
            Session.Add("Catalog", model);
        }
        private void RefreshCatalog(LoginModel login, CatalogModel content)
        {
            //Refresh the catalog model
            content = CatalogModel.GetCatalogItems(login.AuthenticationUser, content.SRSProxy);

            //Replace the catalog session with the updated one
            Session.Remove("Catalog");
            Session.Add("Catalog", content);
        }
        public static SettingsModel GetExportMappings(AuthenticatedUserManager user)
        {
            SettingsModel model = InitializeCatalog(user, CatalogModel.SRSAuthenticate(user));

            CatalogModel proxyCatalog = new CatalogModel();
            model.Catalog.Catalogs.RemoveAll(item => item.ItemType != "Folder" && item.ItemType !="Report");
            foreach (CatalogModel catModel in model.Catalog.Catalogs)
            {
                catModel.Children.RemoveAll(item => item.ItemType != "Folder" && item.ItemType != "Report");
                foreach (CatalogModel catModel2 in catModel.Children)
                {
                    catModel2.Children.RemoveAll(item => item.ItemType != "Folder" && item.ItemType != "Report");
                }
            }
            model.Catalog.Catalogs.RemoveAll(item => item.ItemType == "Folder" && item.Children.Count == 0);

            foreach (CatalogModel catModel in model.Catalog.Catalogs)
            {
                catModel.Catalogs.RemoveAll(item => item.ItemType == "Folder" && item.Children.Count == 0);
                foreach (CatalogModel catModel2 in model.Catalog.Catalogs)
                {
                    catModel2.Catalogs.RemoveAll(item => item.ItemType == "Folder" && item.Children.Count == 0);
                }
            }
            model.ExportMappings = new BOExportMapCollection();
            model.ExportMappings.Fill();

            model.ExportMapDisplayOptions = new StringCollection();
            model.ExportMapDisplayOptions.Add(Constants.ExportMapCatalogOptions.ExportAndView);
            model.ExportMapDisplayOptions.Add(Constants.ExportMapCatalogOptions.ExportOnly);
            return model;
        }
        /// <summary>
        /// Converts NCatalogItem to CatalogModel
        /// </summary>
        public static CatalogModel ToModel(NCatalogItem item)
        {
            CatalogModel model = new CatalogModel();
            //Construct the key
            model.Key = item.Path.Replace("/", "_");
            model.Key = model.Key.Replace(" ", "");

            model.Name = item.Name;
            model.Path = "root"+ item.Path;
            model.ItemType = item.ItemType;
            model.ImageUrlSuffix = item.ImageUrlSuffix;
            model.ReportParameters = item.ReportParameters;

            string parent = "root" + item.Path;
            string[] nodes = parent.Split('/');
            int length = nodes.Length;
            int index = 1;
            parent = nodes[0];
            while(index < length-1)
            {
                parent += "/" + nodes[index];
                index ++;
            }
            model.Parent = parent;
            return model;
        }
        /// <summary>
        /// Gets the catalog items from the SRS.
        /// </summary>
        public static CatalogModel GetCatalogItems(AuthenticatedUserManager user, ReportingServiceClient srsProxy)
        {
            CatalogModel final = new CatalogModel();
            NCatalogItemCollection catalogs = user.CatalogInteractionManager.LookupCatalogItems(null, true, true, srsProxy);
            List<CatalogModel> models = new List<CatalogModel>();

            foreach (NCatalogItem item in catalogs)
            {
                models.Add(ToModel(item));
            }
            final.AllItems = models;

            //Process Child
            List<CatalogModel> finalCatalog = new List<CatalogModel>();
            foreach (var parent in models)
            {
                parent.AllItems.Add(parent);
                if (parent.ItemType.Equals("Folder", StringComparison.OrdinalIgnoreCase))
                {
                    foreach (var child in models)
                    {
                        //check parents
                        if (child.Parent.Equals(parent.Path, StringComparison.OrdinalIgnoreCase))
                        {
                            parent.Children.Add(child);
                        }
                    }

                    if(parent.Parent.Equals("root", StringComparison.OrdinalIgnoreCase))
                    {
                        finalCatalog.Add(parent);
                    }
                }
            }
            final.Catalogs = finalCatalog;
            final.SRSProxy = srsProxy;
            return final;
        }