internal ObservableList <ExternalItemFieldBase> GetUpdatedFields(ObservableList <ExternalItemFieldBase> mItemsFields, bool online, BackgroundWorker bw = null) { ObservableList <ExternalItemFieldBase> updatedFields = new ObservableList <ExternalItemFieldBase>(); if (AlmCore.AlmItemFields != null) { foreach (ExternalItemFieldBase defaultField in AlmCore.AlmItemFields) { ExternalItemFieldBase currentField = mItemsFields.Where(x => x.ID == defaultField.ID && x.ItemType == defaultField.ItemType).FirstOrDefault(); if (currentField != null) { currentField.ToUpdate = false; if (string.IsNullOrEmpty(currentField.SelectedValue) == false) { if ((defaultField.PossibleValues.Count == 0 && currentField.SelectedValue != defaultField.SelectedValue) || (defaultField.PossibleValues.Count > 0 && defaultField.PossibleValues.Contains(currentField.SelectedValue) && currentField.SelectedValue != defaultField.PossibleValues[0])) { currentField.ToUpdate = true; updatedFields.Add(currentField); } else { currentField.SelectedValue = defaultField.SelectedValue; currentField.ToUpdate = false; } } else { currentField.SelectedValue = defaultField.SelectedValue; currentField.ToUpdate = false; } } } } return(updatedFields); }
private void RefreshgrdDefectsFieldsHandler(object sender, RoutedEventArgs e) { ALMDefectProfile AlmDefectProfile = (ALMDefectProfile)grdDefectsProfiles.CurrentItem; { mALMDefectProfileFields = FetchDefectFields(AlmDefectProfile.AlmType); mALMDefectProfileFields.Where(z => z.Mandatory).ToList().ForEach(x => x.SelectedValue = string.Empty); mALMDefectProfileFieldsExisted = new ObservableList <ExternalItemFieldBase>(); foreach (ExternalItemFieldBase aLMDefectProfileField in mALMDefectProfileFields) { ExternalItemFieldBase aLMDefectProfileFieldExisted = (ExternalItemFieldBase)aLMDefectProfileField.CreateCopy(); if (!string.IsNullOrEmpty(aLMDefectProfileField.ExternalID)) { aLMDefectProfileFieldExisted.ExternalID = string.Copy(aLMDefectProfileField.ExternalID); } ExternalItemFieldBase field = AlmDefectProfile.ALMDefectProfileFields.Where(x => x.ID == aLMDefectProfileField.ID).FirstOrDefault(); if (field != null) { aLMDefectProfileFieldExisted.SelectedValue = field.SelectedValue; } aLMDefectProfileFieldExisted.PossibleValues = aLMDefectProfileField.PossibleValues; mALMDefectProfileFieldsExisted.Add(aLMDefectProfileFieldExisted); } AlmDefectProfile.ALMDefectProfileFields = mALMDefectProfileFieldsExisted; } }
private ObservableList <ExternalItemFieldBase> AddFieldsValues(List <QTestApiModel.FieldResource> testSetfieldsCollection, string testSetfieldInRestSyntax) { //TODO: need to handle duplicate fields ObservableList <ExternalItemFieldBase> fields = new ObservableList <ExternalItemFieldBase>(); if ((testSetfieldsCollection != null) && (testSetfieldsCollection.Count > 0)) { foreach (QTestApiModel.FieldResource field in testSetfieldsCollection) { if (string.IsNullOrEmpty(field.Label)) { continue; } ExternalItemFieldBase itemfield = new ExternalItemFieldBase(); itemfield.ID = field.Id.ToString(); itemfield.ExternalID = field.OriginalName; // Temp ??? Check if ExternalID has other use in this case itemfield.Name = field.Label; bool isMandatory; bool.TryParse(field.Required.ToString(), out isMandatory); itemfield.Mandatory = isMandatory; bool isSystemField; bool.TryParse(field.SystemField.ToString(), out isSystemField); itemfield.SystemFieled = isSystemField; if (itemfield.Mandatory) { itemfield.ToUpdate = true; } itemfield.ItemType = testSetfieldInRestSyntax; itemfield.Type = field.DataType; if (field.AllowedValues != null) { foreach (QTestApiModel.AllowedValueResource value in field.AllowedValues) { itemfield.PossibleValues.Add(value.Label); } } if (itemfield.PossibleValues.Count > 0) { if (field.DefaultValue != null) { itemfield.SelectedValue = field.DefaultValue; } else { itemfield.SelectedValue = itemfield.PossibleValues[0]; } } else { itemfield.SelectedValue = "Unassigned"; } fields.Add(itemfield); } } return(fields); }
public void RefreshALMItemFields(ObservableList <ExternalItemFieldBase> exitingFields, bool online, BackgroundWorker bw = null) { if (ALMIntegration.Instance.AutoALMProjectConnect()) { //Get latestALMFields from ALMCore with Online flag ObservableList <ExternalItemFieldBase> latestALMFields = AlmCore.GetALMItemFields(bw, online); //Merging Latest with exiting if (exitingFields == null) { exitingFields = new ObservableList <ExternalItemFieldBase>(); } foreach (ExternalItemFieldBase latestField in latestALMFields) { ExternalItemFieldBase existingField = exitingFields.Where(x => x.ID == latestField.ID).FirstOrDefault(); if (existingField != null) { existingField.Name = latestField.Name; existingField.ItemType = latestField.ItemType; existingField.Mandatory = latestField.Mandatory; existingField.ExternalID = latestField.ExternalID; if (latestField.Mandatory == true) { existingField.ToUpdate = true; } existingField.PossibleValues = latestField.PossibleValues; if (string.IsNullOrEmpty(existingField.SelectedValue) == false) { if (!latestField.PossibleValues.Contains(existingField.SelectedValue)) { existingField.SelectedValue = latestField.SelectedValue; } } else { existingField.SelectedValue = latestField.SelectedValue; } } else { exitingFields.Add(latestField); } } //Sorting the list ObservableList <ExternalItemFieldBase> sortedFields = new ObservableList <ExternalItemFieldBase>(from i in exitingFields orderby i.ItemType select i); exitingFields.ClearAll(); exitingFields.Append(sortedFields); } }
public void RefreshALMItemFields(ObservableList <ExternalItemFieldBase> exitingFields, bool online, BackgroundWorker bw = null) { ObservableList <ExternalItemFieldBase> mergedFields = new ObservableList <ExternalItemFieldBase>(); if (ALMIntegration.Instance.AutoALMProjectConnect()) { //Get latestALMFields from ALMCore with Online flag ObservableList <ExternalItemFieldBase> latestALMFields = AlmCore.GetALMItemFields(bw, online); foreach (ExternalItemFieldBase latestField in latestALMFields) { ExternalItemFieldBase currentField = exitingFields.Where(x => x.ID == latestField.ID && x.ItemType == latestField.ItemType).FirstOrDefault(); if (currentField != null) { currentField.Name = latestField.Name; currentField.ItemType = latestField.ItemType; currentField.Mandatory = latestField.Mandatory; currentField.ExternalID = latestField.ExternalID; currentField.PossibleValues = latestField.PossibleValues; currentField.ToUpdate = false; if (string.IsNullOrEmpty(currentField.SelectedValue) == false) { if ((latestField.PossibleValues.Count == 0 && currentField.SelectedValue != latestField.SelectedValue) || (latestField.PossibleValues.Count > 0 && latestField.PossibleValues.Contains(currentField.SelectedValue) && currentField.SelectedValue != latestField.PossibleValues[0])) { currentField.ToUpdate = true; } else { currentField.SelectedValue = latestField.SelectedValue; currentField.ToUpdate = false; } } else { currentField.SelectedValue = latestField.SelectedValue; currentField.ToUpdate = false; } mergedFields.Add(currentField); } else { mergedFields.Add(latestField); } } exitingFields.ClearAll(); exitingFields.Append(mergedFields); } }
public ALMDefectsProfilesPage() { Mouse.OverrideCursor = Cursors.Wait; InitializeComponent(); mALMDefectProfiles = WorkSpace.Instance.SolutionRepository.GetAllRepositoryItems <ALMDefectProfile>(); mALMDefectProfileFields = ALMIntegration.Instance.GetALMItemFieldsREST(true, ALM_Common.DataContracts.ResourceType.DEFECT, null); mALMDefectProfileFields.Where(z => z.Mandatory != true).ToList().ForEach(x => x.SelectedValue = string.Empty); // populated values list (the not saved), validate selected values/fields current existing in QC foreach (ALMDefectProfile aLMDefectProfile in mALMDefectProfiles) { mALMDefectProfileFieldsExisted = new ObservableList <ExternalItemFieldBase>(); foreach (ExternalItemFieldBase aLMDefectProfileField in mALMDefectProfileFields) { ExternalItemFieldBase aLMDefectProfileFieldExisted = (ExternalItemFieldBase)aLMDefectProfileField.CreateCopy(); if (!string.IsNullOrEmpty(aLMDefectProfileField.ExternalID)) { aLMDefectProfileFieldExisted.ExternalID = string.Copy(aLMDefectProfileField.ExternalID); } ExternalItemFieldBase field = aLMDefectProfile.ALMDefectProfileFields.Where(x => x.ID == aLMDefectProfileField.ID).FirstOrDefault(); if (field != null) { aLMDefectProfileFieldExisted.SelectedValue = field.SelectedValue; } aLMDefectProfileFieldExisted.PossibleValues = aLMDefectProfileField.PossibleValues; mALMDefectProfileFieldsExisted.Add(aLMDefectProfileFieldExisted); } aLMDefectProfile.ALMDefectProfileFields = mALMDefectProfileFieldsExisted; } grdDefectsProfiles.DataSourceList = mALMDefectProfiles; if (mALMDefectProfiles != null) { if (grdDefectsProfiles.CurrentItem != null) { grdDefectsFields.DataSourceList = ((ALMDefectProfile)grdDefectsProfiles.CurrentItem).ALMDefectProfileFields; } } SetFieldsGrid(); Mouse.OverrideCursor = null; _manualCheckedEvent = true; }
public static ObservableList <ExternalItemFieldBase> RefreshItemFields(eRQMItemType itemType, ObservableList <ExternalItemFieldBase> exitingFields, BackgroundWorker bw) { ObservableList <ExternalItemFieldBase> updatedFields = GetItemFields(itemType, bw); ObservableList <ExternalItemFieldBase> refreshedFields = new ObservableList <ExternalItemFieldBase>(); foreach (ExternalItemFieldBase field in updatedFields) { if (exitingFields != null) { ExternalItemFieldBase existingField = exitingFields.Where(x => x.ItemType == itemType.ToString() && x.ID == field.ID).FirstOrDefault(); if (existingField != null) { if (field.Mandatory == false) { field.ToUpdate = existingField.ToUpdate; } if (string.IsNullOrEmpty(existingField.SelectedValue) == false) { if (field.PossibleValues.Count > 0) { if (field.PossibleValues.Contains(existingField.SelectedValue)) { field.SelectedValue = existingField.SelectedValue; } } else { field.SelectedValue = existingField.SelectedValue; } } } } refreshedFields.Add(field); } //TODO: sort the fields by ItemType before returning ObservableList <ExternalItemFieldBase> sortedFields = refreshedFields; refreshedFields = new ObservableList <ExternalItemFieldBase>(from i in sortedFields orderby i.ItemType select i); return(refreshedFields); }
public ObservableList <ExternalItemFieldBase> RefreshALMItemFields(ObservableList <ExternalItemFieldBase> exitingFields, ObservableList <ExternalItemFieldBase> latestALMFields) { ObservableList <ExternalItemFieldBase> mergedFields = new ObservableList <ExternalItemFieldBase>(); foreach (ExternalItemFieldBase latestField in latestALMFields) { ExternalItemFieldBase currentField = exitingFields.Where(x => x.ID == latestField.ID && x.ItemType == latestField.ItemType).FirstOrDefault(); if (currentField != null) { currentField.Name = latestField.Name; currentField.ItemType = latestField.ItemType; currentField.Mandatory = latestField.Mandatory; currentField.ExternalID = latestField.ExternalID; currentField.PossibleValues = latestField.PossibleValues; currentField.ToUpdate = false; if (string.IsNullOrEmpty(currentField.SelectedValue) == false) { if ((latestField.PossibleValues.Count == 0 && currentField.SelectedValue != latestField.SelectedValue) || (latestField.PossibleValues.Count > 0 && latestField.PossibleValues.Contains(currentField.SelectedValue) && currentField.SelectedValue != latestField.PossibleValues[0])) { currentField.ToUpdate = true; } else { currentField.SelectedValue = latestField.SelectedValue; currentField.ToUpdate = false; } } else { currentField.SelectedValue = latestField.SelectedValue; currentField.ToUpdate = false; } mergedFields.Add(currentField); } else { mergedFields.Add(latestField); } } exitingFields.ClearAll(); exitingFields.Append(mergedFields); return(mergedFields); }
private void Save(object sender, RoutedEventArgs e) { if (mALMDefectProfiles.Where(x => x.IsDefault == true).ToList().Count == 0) { Reporter.ToUser(eUserMsgKeys.NoDefaultDefectProfileSelected); return; } foreach (ALMDefectProfile _ALMDefectProfile in mALMDefectProfiles.Where(x => x.ToUpdate == true).ToList()) { ExternalItemFieldBase notPopulatedMandatoryField = _ALMDefectProfile.ALMDefectProfileFields.Where(x => x.Mandatory == true && x.ExternalID != "description" && x.ExternalID != "name" && x.ExternalID != "Summary" && (x.SelectedValue == null || x.SelectedValue == string.Empty)).FirstOrDefault(); if (notPopulatedMandatoryField != null) { Reporter.ToUser(eUserMsgKeys.MissedMandatotryFields, notPopulatedMandatoryField.Name, _ALMDefectProfile.Name); return; } ExternalItemFieldBase wrongSelectedField = _ALMDefectProfile.ALMDefectProfileFields.Where(x => x.SelectedValue != null && x.SelectedValue != string.Empty && x.PossibleValues.Count > 0 && (!x.PossibleValues.Contains(x.SelectedValue))).FirstOrDefault(); if (wrongSelectedField != null) { Reporter.ToUser(eUserMsgKeys.WrongValueSelectedFromTheList, wrongSelectedField.Name, _ALMDefectProfile.Name); return; } } foreach (ALMDefectProfile _ALMDefectProfile in mALMDefectProfiles.Where(x => x.ToUpdate == true).ToList()) { Reporter.ToGingerHelper(eGingerHelperMsgKey.SaveItem, null, _ALMDefectProfile.GetNameForFileName(), "item"); if ((_ALMDefectProfile.ContainingFolder == null) || (_ALMDefectProfile.ContainingFolder == string.Empty)) { _ALMDefectProfile.ContainingFolder = App.UserProfile.Solution.Folder + _ALMDefectProfile.ObjFolderName; _ALMDefectProfile.FilePath = _ALMDefectProfile.ContainingFolder + @"\" + _ALMDefectProfile.FilePath; } WorkSpace.Instance.SolutionRepository.SaveRepositoryItem(_ALMDefectProfile); Reporter.CloseGingerHelper(); } genWin.Close(); }
private void AddDefectsProfile(object sender, RoutedEventArgs e) { Mouse.OverrideCursor = Cursors.Wait; ALMDefectProfile newALMDefectProfile = new ALMDefectProfile(); newALMDefectProfile.ToUpdate = true; if (mALMDefectProfiles.Count == 0) { newALMDefectProfile.IsDefault = true; newALMDefectProfile.ID = 1; } else { newALMDefectProfile.ID = mALMDefectProfiles.Select(x => x.ID).Max() + 1; newALMDefectProfile.IsDefault = false; } newALMDefectProfile.Name = "Some Name " + (newALMDefectProfile.ID + 1).ToString(); newALMDefectProfile.Description = "Some Description " + (newALMDefectProfile.ID + 1).ToString(); mALMDefectProfiles.Add(newALMDefectProfile); // mALMDefectProfileFields.ToList().ForEach(x => newALMDefectProfile.ALMDefectProfileFields.Add((ExternalItemFieldBase)x.CreateCopy())); mALMDefectProfileFieldsExisted = new ObservableList <ExternalItemFieldBase>(); foreach (ExternalItemFieldBase aLMDefectProfileField in mALMDefectProfileFields) { ExternalItemFieldBase aLMDefectProfileFieldExisted = (ExternalItemFieldBase)aLMDefectProfileField.CreateCopy(); if (!string.IsNullOrEmpty(aLMDefectProfileField.ExternalID)) { aLMDefectProfileFieldExisted.ExternalID = string.Copy(aLMDefectProfileField.ExternalID); } aLMDefectProfileFieldExisted.PossibleValues = aLMDefectProfileField.PossibleValues; mALMDefectProfileFieldsExisted.Add(aLMDefectProfileFieldExisted); } newALMDefectProfile.ALMDefectProfileFields = mALMDefectProfileFieldsExisted; grdDefectsProfiles.DataSourceList = mALMDefectProfiles; grdDefectsFields.DataSourceList = newALMDefectProfile.ALMDefectProfileFields; Mouse.OverrideCursor = null; }
private void Save(object sender, RoutedEventArgs e) { if (mALMDefectProfiles.Where(x => x.IsDefault == true).ToList().Count == 0) { Reporter.ToUser(eUserMsgKey.NoDefaultDefectProfileSelected); return; } // // Validation section foreach (ALMDefectProfile _ALMDefectProfile in mALMDefectProfiles.Where(x => x.ToUpdate == true).ToList()) { // Mandatory fields validation ExternalItemFieldBase notPopulatedMandatoryField = _ALMDefectProfile.ALMDefectProfileFields.Where(x => x.Mandatory == true && x.ExternalID != "description" && x.ExternalID != "name" && x.ExternalID != "Summary" && (x.SelectedValue == null || x.SelectedValue == string.Empty)).FirstOrDefault(); if (notPopulatedMandatoryField != null) { Reporter.ToUser(eUserMsgKey.MissedMandatotryFields, notPopulatedMandatoryField.Name, _ALMDefectProfile.Name); return; } // Wrong list selection validation ExternalItemFieldBase wrongSelectedField = _ALMDefectProfile.ALMDefectProfileFields.Where(x => ((string.Equals(x.Type, "LookupList", StringComparison.OrdinalIgnoreCase) || string.Equals(x.Type, "UserList", StringComparison.OrdinalIgnoreCase))) && x.SelectedValue != null && x.SelectedValue != string.Empty && x.PossibleValues.Count > 0 && (!x.PossibleValues.Contains(x.SelectedValue))).FirstOrDefault(); if (wrongSelectedField != null) { Reporter.ToUser(eUserMsgKey.WrongValueSelectedFromTheList, wrongSelectedField.Name, _ALMDefectProfile.Name); return; } // Numeric selection validation int numeric = 0; ExternalItemFieldBase wrongNonNumberValueField = _ALMDefectProfile.ALMDefectProfileFields.Where(x => (string.Equals(x.Type, "Number", StringComparison.OrdinalIgnoreCase)) && x.SelectedValue != null && x.SelectedValue != string.Empty && !(int.TryParse(x.SelectedValue, out numeric))).FirstOrDefault(); if (wrongNonNumberValueField != null) { Reporter.ToUser(eUserMsgKey.WrongNonNumberValueInserted, wrongNonNumberValueField.Name, _ALMDefectProfile.Name); return; } // Date selection validation (QC receiving date in format yyyy-mm-dd) DateTime dt; ExternalItemFieldBase wrongDateValueField = _ALMDefectProfile.ALMDefectProfileFields.Where(x => (string.Equals(x.Type, "Date", StringComparison.OrdinalIgnoreCase)) && x.SelectedValue != null && x.SelectedValue != string.Empty && !(DateTime.TryParseExact(x.SelectedValue, "yyyy-mm-dd", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out dt))).FirstOrDefault(); if (wrongDateValueField != null) { Reporter.ToUser(eUserMsgKey.WrongDateValueInserted, wrongDateValueField.Name, _ALMDefectProfile.Name); return; } } foreach (ALMDefectProfile _ALMDefectProfile in mALMDefectProfiles.Where(x => x.ToUpdate == true).ToList()) { Reporter.ToStatus(eStatusMsgKey.SaveItem, null, _ALMDefectProfile.GetNameForFileName(), "item"); if ((_ALMDefectProfile.ContainingFolder == null) || (_ALMDefectProfile.ContainingFolder == string.Empty)) { _ALMDefectProfile.ContainingFolder = System.IO.Path.Combine(WorkSpace.Instance.Solution.Folder, _ALMDefectProfile.ObjFolderName); _ALMDefectProfile.FilePath = _ALMDefectProfile.ContainingFolder + @"\" + _ALMDefectProfile.FilePath; } WorkSpace.Instance.SolutionRepository.SaveRepositoryItem(_ALMDefectProfile); Reporter.HideStatusMessage(); } genWin.Close(); }
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); }