Example #1
0
 public void CreateRQMRepository()
 {
     RQMRep = new RqmRepository(RQMCore.ConfigPackageFolderPath);
 }
Example #2
0
        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);
        }