public void CreateRQMRepository() { RQMRep = new RqmRepository(RQMCore.ConfigPackageFolderPath); }
public static ObservableList <ExternalItemFieldBase> GetItemFields(eRQMItemType itemType, BackgroundWorker bw) { ObservableList <ExternalItemFieldBase> fields = new ObservableList <ExternalItemFieldBase>(); //TODO : receive as parameters: RqmRepository rqmRep = new RqmRepository(); List <IProjectDefinitions> rqmProjectsDataList; //string rqmSserverUrl = loginData.Server.ToString() + "/"; string rqmSserverUrl = ALMCore.AlmConfig.ALMServerURL + "/"; LoginDTO loginData = new LoginDTO() { User = ALMCore.AlmConfig.ALMUserName, Password = ALMCore.AlmConfig.ALMPassword, Server = ALMCore.AlmConfig.ALMServerURL }; IProjectData rqmProjectsData = rqmRep.GetVisibleProjects(loginData); rqmProjectsDataList = rqmProjectsData.IProjectDefinitions; IProjectDefinitions currentProj = rqmProjectsDataList.FirstOrDefault(); string rqmDomain = currentProj.Prefix; string rqmProject = currentProj.ProjectName; //------------------------------- Improved solution string baseUri_ = string.Empty; string selfLink_ = string.Empty; int maxPageNumber_ = 0; int totalCategoryTypeCount = 0; string categoryValue = string.Empty; // --> itemfield.PossibleValues.Add(ccNode.Name); string categoryTypeID = string.Empty; //--> itemfield.ID //TODO: Populate list fields with CategoryTypes populatedValue = "Starting fields retrieve process... "; bw.ReportProgress(totalValues, populatedValue); RqmResponseData categoryType = RQM.RQMConnect.Instance.RQMRep.GetRqmResponse(loginData, new Uri(rqmSserverUrl + rqmDomain + "/service/com.ibm.rqm.integration.service.IIntegrationService/resources/" + rqmProject + "/categoryType")); XmlDocument categoryTypeList = new XmlDocument(); if (!string.IsNullOrEmpty(categoryType.responseText)) { categoryTypeList.LoadXml(categoryType.responseText); } //TODO: Get 'next' and 'last links XmlNodeList linkList_ = categoryTypeList.GetElementsByTagName("link"); if (linkList_.Count > 0) { XmlNode selfPage = linkList_.Item(1); XmlNode lastPage_ = linkList_.Item(3); if (selfPage.Attributes["rel"].Value.ToString() == "self") //verify self link is present { selfLink_ = selfPage.Attributes["href"].Value.ToString(); //baseUri_ = selfLink_.Substring(0, selfLink_.Length - 1); baseUri_ = selfLink_; } if (lastPage_.Attributes["rel"].Value.ToString() == "last") //verify there is more than one page { if (selfPage.Attributes["rel"].Value.ToString() == "self") //verify self link is present { selfLink_ = selfPage.Attributes["href"].Value.ToString(); baseUri_ = selfLink_.Substring(0, selfLink_.Length - 1); } string tempString_ = lastPage_.Attributes["href"].Value.ToString(); maxPageNumber_ = System.Convert.ToInt32(tempString_.Substring(tempString_.LastIndexOf('=') + 1)); } string newUri_ = string.Empty; List <string> categoryTypeUriPages = new List <string>(); //List<ExternalItemFieldBase> tempFieldList = new List<ExternalItemFieldBase>(); ConcurrentBag <ExternalItemFieldBase> catTypeRsult = new ConcurrentBag <ExternalItemFieldBase>(); for (int k = 0; k <= maxPageNumber_; k++) { if (maxPageNumber_ > 0) { newUri_ = baseUri_ + k.ToString(); categoryTypeUriPages.Add(newUri_); } else { newUri_ = baseUri_; categoryTypeUriPages.Add(newUri_); } } //Parallel computing solution List <XmlNode> entryList = new List <XmlNode>(); if (categoryTypeUriPages.Count > 1) { Parallel.ForEach(categoryTypeUriPages.AsParallel(), categoryTypeUri => { newUri_ = categoryTypeUri; categoryType = RQM.RQMConnect.Instance.RQMRep.GetRqmResponse(loginData, new Uri(newUri_)); if (!string.IsNullOrEmpty(categoryType.responseText)) { categoryTypeList.LoadXml(categoryType.responseText); } //TODO: Get all ID links under entry: XmlNodeList categoryTypeEntry_ = categoryTypeList.GetElementsByTagName("entry"); foreach (XmlNode entryNode in categoryTypeEntry_) { entryList.Add(entryNode); } ParallelLoopResult innerResult = Parallel.ForEach(entryList.AsParallel(), singleEntry => { XmlNodeList innerNodes = singleEntry.ChildNodes; XmlNode linkNode = innerNodes.Item(4); ExternalItemFieldBase itemfield = new ExternalItemFieldBase(); string getIDlink = string.Empty; getIDlink = linkNode.Attributes["href"].Value.ToString(); // retrived CategoryType link RqmResponseData categoryTypeDetail = RQM.RQMConnect.Instance.RQMRep.GetRqmResponse(loginData, new Uri(getIDlink)); //System.Diagnostics.Debug.WriteLine("entered loop 2"); XmlDocument categoryTypeListing = new XmlDocument(); if (!string.IsNullOrEmpty(categoryTypeDetail.responseText)) { categoryTypeListing.LoadXml(categoryTypeDetail.responseText); } string categoryTypeName = string.Empty; // -->itemfield.Name string categoryTypeItemType = string.Empty; //-->itemfield.ItemType string categoryTypeMandatory = string.Empty; // --> itemfield.Mandatory & initial value for : --> itemfield.ToUpdate string typeIdentifier = categoryTypeListing.GetElementsByTagName("ns3:identifier").Item(0).InnerText; categoryTypeID = typeIdentifier.Substring(typeIdentifier.LastIndexOf(':') + 1); categoryTypeName = categoryTypeListing.GetElementsByTagName("ns3:title").Item(0).InnerText; categoryTypeItemType = categoryTypeListing.GetElementsByTagName("ns2:scope").Item(0).InnerText; categoryTypeMandatory = categoryTypeListing.GetElementsByTagName("ns2:required").Item(0).InnerText; itemfield.ItemType = categoryTypeItemType; itemfield.ID = categoryTypeID; itemfield.Name = categoryTypeName; if (itemfield.SelectedValue == null) { itemfield.SelectedValue = "NA"; } if (categoryTypeMandatory == "true") { itemfield.ToUpdate = true; itemfield.Mandatory = true; } else { itemfield.ToUpdate = false; itemfield.Mandatory = false; } catTypeRsult.Add(itemfield); populatedValue = "Populating field :" + categoryTypeName + " \r\nNumber of fields populated :" + catTypeRsult.Count; bw.ReportProgress(catTypeRsult.Count, populatedValue); }); }); } else { populatedValue = string.Empty; newUri_ = baseUri_; categoryType = RQM.RQMConnect.Instance.RQMRep.GetRqmResponse(loginData, new Uri(newUri_)); if (!string.IsNullOrEmpty(categoryType.responseText)) { categoryTypeList.LoadXml(categoryType.responseText); } //TODO: Get all ID links under entry: XmlNodeList categoryTypeEntry_ = categoryTypeList.GetElementsByTagName("entry"); foreach (XmlNode entryNode in categoryTypeEntry_) { entryList.Add(entryNode); } ParallelLoopResult innerResult = Parallel.ForEach(entryList.AsParallel(), singleEntry => { XmlNodeList innerNodes = singleEntry.ChildNodes; XmlNode linkNode = innerNodes.Item(4); ExternalItemFieldBase itemfield = new ExternalItemFieldBase(); string getIDlink = string.Empty; getIDlink = linkNode.Attributes["href"].Value.ToString(); // retrived CategoryType link RqmResponseData categoryTypeDetail = RQM.RQMConnect.Instance.RQMRep.GetRqmResponse(loginData, new Uri(getIDlink)); XmlDocument categoryTypeListing = new XmlDocument(); if (!string.IsNullOrEmpty(categoryTypeDetail.responseText)) { categoryTypeListing.LoadXml(categoryTypeDetail.responseText); } string categoryTypeName = string.Empty; // -->itemfield.Name string categoryTypeItemType = string.Empty; //-->itemfield.ItemType string categoryTypeMandatory = string.Empty; // --> itemfield.Mandatory & initial value for : --> itemfield.ToUpdate string typeIdentifier = categoryTypeListing.GetElementsByTagName("ns3:identifier").Item(0).InnerText; categoryTypeID = typeIdentifier.Substring(typeIdentifier.LastIndexOf(':') + 1); categoryTypeName = categoryTypeListing.GetElementsByTagName("ns3:title").Item(0).InnerText; categoryTypeItemType = categoryTypeListing.GetElementsByTagName("ns2:scope").Item(0).InnerText; categoryTypeMandatory = categoryTypeListing.GetElementsByTagName("ns2:required").Item(0).InnerText; itemfield.ItemType = categoryTypeItemType; itemfield.ID = categoryTypeID; itemfield.Name = categoryTypeName; if (itemfield.SelectedValue == null) { itemfield.SelectedValue = "NA"; } if (categoryTypeMandatory == "true") { itemfield.ToUpdate = true; itemfield.Mandatory = true; } else { itemfield.ToUpdate = false; itemfield.Mandatory = false; } catTypeRsult.Add(itemfield); populatedValue = "Populating field :" + categoryTypeName + " \r\n Number of fields populated :" + catTypeRsult.Count; bw.ReportProgress(catTypeRsult.Count, populatedValue); }); } foreach (ExternalItemFieldBase field in catTypeRsult) { fields.Add(field); totalCategoryTypeCount++; System.Diagnostics.Debug.WriteLine("Number of retrieved fields:" + totalCategoryTypeCount); } //TODO: Add Values to CategoryTypes Parallel populatedValue = "Starting values retrieve process... "; bw.ReportProgress(totalValues, populatedValue); RqmResponseData category = RQM.RQMConnect.Instance.RQMRep.GetRqmResponse(loginData, new Uri(rqmSserverUrl + rqmDomain + "/service/com.ibm.rqm.integration.service.IIntegrationService/resources/" + rqmProject + "/category")); XmlDocument CategoryList = new XmlDocument(); CategoryList.LoadXml(category.responseText); totalValues = 0; populatedValue = string.Empty; //TODO: Get 'next' and 'last links XmlNodeList linkList = CategoryList.GetElementsByTagName("link"); XmlNode selfPageNode = linkList.Item(1); XmlNode lastPageNode = linkList.Item(3); string selfLink = selfPageNode.Attributes["href"].Value.ToString(); string baseUri = selfLink.Substring(0, selfLink.Length - 1); string tempString = lastPageNode.Attributes["href"].Value.ToString(); int maxPageNumber = System.Convert.ToInt32(tempString.Substring(tempString.LastIndexOf('=') + 1)); string newUri = string.Empty; List <string> categoryUriPages = new List <string>(); for (int i = 0; i <= maxPageNumber; i++) //for (int i = 0; i <= 25; i++) //scale testing { if (maxPageNumber > 0) { newUri = baseUri + i.ToString(); categoryUriPages.Add(newUri); } else { newUri = baseUri; categoryUriPages.Add(newUri); } } List <ExternalItemFieldBase> valueFields = new List <ExternalItemFieldBase>(); if (categoryUriPages.Count > 0) { int iDCount = 0; Parallel.ForEach(categoryUriPages.AsParallel(), singleUri => { newUri = singleUri; RqmResponseData category_ = new RqmResponseData(); category_ = RQM.RQMConnect.Instance.RQMRep.GetRqmResponse(loginData, new Uri(newUri)); if (category_.ErrorCode == 401) { RQM.RQMConnect.Instance.RQMRep.ConnectToServer(loginData.Server.ToString(), loginData.User.ToString(), loginData.Password.ToString()); RQM.RQMConnect.Instance.RQMRep.ConnetProject(rqmDomain, rqmProject, loginData.User.ToString(), loginData.Password.ToString()); category_ = RQM.RQMConnect.Instance.RQMRep.GetRqmResponse(loginData, new Uri(newUri)); } XmlDocument CategoryList_ = new XmlDocument(); if (!string.IsNullOrEmpty(category_.responseText)) { CategoryList_.LoadXml(category_.responseText); } XmlNodeList categoryIDs = CategoryList_.GetElementsByTagName("id"); iDCount += categoryIDs.Count; if (categoryIDs.Count > 0) { List <string> idLinkList = new List <string>(); for (int n = 1; n < categoryIDs.Count; n++) { idLinkList.Add(categoryIDs.Item(n).InnerText); } Parallel.ForEach(idLinkList.AsParallel(), getIDlink => { ExternalItemFieldBase valuesItemfield = new ExternalItemFieldBase(); if (!string.IsNullOrEmpty(getIDlink)) { RqmResponseData categoryValueDetails = RQM.RQMConnect.Instance.RQMRep.GetRqmResponse(loginData, new Uri(getIDlink)); // retrieve category page XmlDocument categoryValueXML = new XmlDocument(); if (categoryValueDetails.ErrorCode == 401) { RQM.RQMConnect.Instance.RQMRep.ConnectToServer(loginData.Server.ToString(), loginData.User.ToString(), loginData.Password.ToString()); RQM.RQMConnect.Instance.RQMRep.ConnetProject(rqmDomain, rqmProject, loginData.User.ToString(), loginData.Password.ToString()); categoryValueDetails = RQM.RQMConnect.Instance.RQMRep.GetRqmResponse(loginData, new Uri(getIDlink)); } if (!string.IsNullOrEmpty(categoryValueDetails.responseText)) { categoryValueXML.LoadXml(categoryValueDetails.responseText); } //categoryValueXML.LoadXml(categoryValueDetails.responseText.ToString()); XmlNode categoryTypeNode; string catTypeLink = string.Empty; if (!string.IsNullOrEmpty(categoryValueXML.InnerText.ToString())) { categoryTypeNode = categoryValueXML.GetElementsByTagName("ns2:categoryType").Item(0); //need to consider changes in tag i.e. ns3/ns4... catTypeLink = categoryTypeNode.Attributes["href"].Value.ToString(); categoryTypeID = catTypeLink.Substring(catTypeLink.LastIndexOf(':') + 1); categoryValue = categoryValueXML.GetElementsByTagName("ns3:title").Item(0).InnerText; valuesItemfield.ID = categoryTypeID; valuesItemfield.PossibleValues.Add(categoryValue); totalValues++; valueFields.Add(valuesItemfield); System.Diagnostics.Debug.WriteLine("Total number of populated values is :" + totalValues + "/" + iDCount * (categoryUriPages.Count + 1)); //TODO pass this to a string to print in the UI populatedValue = "Populating value:" + categoryValue + " \r\n Total Values:" + totalValues; bw.ReportProgress(totalValues, populatedValue); } } }); System.Diagnostics.Debug.WriteLine("inner parallel -->finished"); } }); System.Diagnostics.Debug.WriteLine("outer parallel -->finished"); } //TODO: insert loop to add value to field if (fields.Count > 0) //category list has at least 1 entry { for (int j = 0; j < fields.Count; j++) //run through list { foreach (ExternalItemFieldBase values in valueFields) { if ((fields[j].ID.ToString() == values.ID.ToString())) { ExternalItemFieldBase addValueField = fields[j]; foreach (string possibleValue in values.PossibleValues) { addValueField.PossibleValues.Add(possibleValue); } fields[j] = addValueField; fields[j].SelectedValue = fields[j].PossibleValues[0]; } } } } } return(fields); }