// populate the folders as tree nodes private CustomTreeNode createNodes(Folder folder) { // first create the root node CustomTreeNode node = new CustomTreeNode(); node.Name = folder.name; node.Text = folder.name; node.fieldType = folder.type; node.fieldId = folder.id; // check for the child folders and call this method again // it will be a self loop method FolderDao folderDao = new FolderDao(); List<Folder> childFolders = folderDao.getChildFolders(node.fieldId); if (childFolders.Count > 0) { foreach (var childFolder in childFolders) { CustomTreeNode childNode = createNodes(childFolder); node.Nodes.Add(childNode); } } return node; }
// This method fetches only the first level folders , and further calls the child folders of the // first level folders public void getAllFolders(String token, String workspaceId,int level) { // used class objects defined below List<Folder> firstLevelFolders = new List<Folder>(); String url = Resource.endpoint + "wittyparrot/api/folders/workspaceId/" + workspaceId + "/level/" + level + ""; var client = new RestClient(); client.BaseUrl = new Uri(url); //var strJSONContent = "{\"workspaceId\":\"" + workspaceId + "\" ,\"level\":\"" + level + "\"}"; var request = new RestRequest(); request.Method = Method.GET; request.AddHeader("Authorization", "Bearer " + token); request.Parameters.Clear(); request.AddParameter("Authorization", "Bearer " + token, ParameterType.HttpHeader); request.RequestFormat = DataFormat.Json; // execute the request IRestResponse response = client.Execute(request); String content = response.Content; if (response.ErrorException != null) { var statusMessage = RestUtils.getErrorMessage(response.StatusCode); MessageBox.Show(statusMessage == "" ? response.StatusDescription : statusMessage); var myException = new ApplicationException(response.StatusDescription, response.ErrorException); throw myException; } // This method pulls the first level folder firstLevelFolders = JsonConvert.DeserializeObject<List<Folder>>(content); if (firstLevelFolders != null && firstLevelFolders.Count > 0) { // save the folders into db FolderDao folderDao = new FolderDao(); folderDao.saveAllFolders(firstLevelFolders); foreach (var folder in firstLevelFolders) { if (folder.hasChildren == false) { // in this scenario child folders wont be present // query for the wits in the folder // Implimenting thread to improve the performance Thread thread = new Thread(() => getFolderWitsThread(folder)); thread.Start(); } else if (folder.hasChildren == true) { // in this scenario child folders will be there getChildFolders(token, folder.id,1); // Implimenting thread to improve the performance Thread thread = new Thread(() => getFolderWitsThread(folder)); thread.Start(); } } } }
// Create Folder heirarchy using customtreeview control private void prepareTreeNodeHeirarchy(String selectedWSid) { FolderDao folderDao = new FolderDao(); List<Folder> folders = folderDao.getFolders(selectedWSid); if (folders.Count > 0) { myCustomTreeView.Nodes.Clear(); foreach (var folder in folders) { CustomTreeNode node = createNodes(folder); myCustomTreeView.Nodes.Add(node); } } }
// This method will fetch all the child folders of the parent folder public void getChildFolders(String token, String folderId,int level) { String url = Resource.endpoint + "wittyparrot/api/folders/" + folderId + "/hierarchy/level/" + level ; var client = new RestClient(); client.BaseUrl = new Uri(url); var request = new RestRequest(); request.Method = Method.GET; request.Parameters.Clear(); request.AddParameter("Authorization", "Bearer " + token, ParameterType.HttpHeader); request.RequestFormat = DataFormat.Json; // execute the request IRestResponse response = client.Execute(request); String content = response.Content; if (response.ErrorException != null) { var statusMessage = RestUtils.getErrorMessage(response.StatusCode); MessageBox.Show(statusMessage == "" ? response.StatusDescription : statusMessage); var myException = new ApplicationException(response.StatusDescription, response.ErrorException); throw myException; } Folder parentfolder = JsonConvert.DeserializeObject<Folder>(content); List<Folder> childFolders = parentfolder.children; if (childFolders != null && childFolders.Count > 0) { foreach (var folder in childFolders) { // save the folders into db FolderDao folderDao = new FolderDao(); folderDao.saveFolder(folder); WitsDao witsDao = new WitsDao(); RestClientWits restWits = new RestClientWits(); List<Wits> wits = restWits.getFolderWits(folder.id); if (wits != null && wits.Count > 0) { witsDao.saveAllWits(wits); } if (folder.hasChildren != null && folder.hasChildren == true) { // This is a self loop code where it check if a folder is having child folders // loop itself get all the child folders and the wits of that folder getChildFolders(token, folder.id, level); } } } }