private List <InternalDatasetObject> GetCategorisationObjectWhitCategory(List <InternalDatasetObject> _datasetsLinear, List <InternalCategoryObject> _categoriesLinear) { try { if (GetDataFlowDelegate == null) { GetDataFlowDelegate = new InternalGetDataFlowDelegate(InternalGetDataFlow); } List <IDataflowObject> dfls = GetDataFlowDelegate(); //Qui manca il match con i dataflow estratti datta tabella in BuildCategorySchemeObject List <InternalDatasetObject> dflscatMapped = _datasetsLinear.FindAll(df => dfls.Exists(dfs => dfs.Id.Trim() == df.Code.Trim())); foreach (var dfl in dflscatMapped) { InternalCategoryObject _foundcat = _categoriesLinear.Find(cat => cat.Id == dfl.ThemeId); dfl.CategoryParent = new List <string>() { dfl.ThemeId }; while (_foundcat.PadreId != "-1" && _categoriesLinear.Exists(cat => cat.Id == _foundcat.PadreId)) { _foundcat = _categoriesLinear.Find(cat => cat.Id == _foundcat.PadreId); dfl.CategoryParent.Insert(0, _foundcat.Id); } } return(dflscatMapped); } catch (SdmxException) { throw; } catch (Exception ex) { throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.InternalError, ex); } }
private void RecursivePopulateTreeCategorySP(string IdCategoryParent, List <XmlNode> figli, ref List <InternalCategoryObject> categorie, ref List <InternalCategoryObject> _categoriesLinear, ref List <InternalDatasetObject> _datasetsLinear) { try { foreach (XmlNode ContentObject in figli) { if (ContentObject.Name == "ContentObject" && ContentObject.ChildNodes.Count > 0) { InternalCategoryObject categoria = new InternalCategoryObject(); categoria.PadreId = IdCategoryParent; if (ContentObject.Attributes["Code"] != null) { categoria.Id = ContentObject.Attributes["Code"].Value.ToString(); } categoria.Nomi = SdmxObjectNameDescription.GetNameDescriptions(ContentObject); List <InternalCategoryObject> SubCategory = new List <InternalCategoryObject>(); foreach (XmlNode CategoryProperty in ContentObject.ChildNodes) { switch (CategoryProperty.Name) { case "DatasetList": PopolaDataSets_inCategorySP(categoria.Id, CategoryProperty.ChildNodes, ref _datasetsLinear); break; case "ContentObject": RecursivePopulateTreeCategorySP(categoria.Id, new List <XmlNode>() { CategoryProperty }, ref SubCategory, ref _categoriesLinear, ref _datasetsLinear); break; } } categoria.SubCategory = SubCategory; categorie.Add(categoria); _categoriesLinear.Add(categoria); } } } catch (SdmxException) { throw; } catch (Exception ex) { throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.InternalError, ex); } }
private void RecursivePopulateTreeCategory(string IdCategoryParent, XmlNodeList figli, ref List <InternalCategoryObject> categorie, ref List <InternalCategoryObject> _categoriesLinear, ref List <InternalDatasetObject> _datasetsLinear) { try { foreach (XmlNode ContentObject in figli) { if (ContentObject.Name == "ContentObject" && ContentObject.ChildNodes.Count > 0) { InternalCategoryObject categoria = new InternalCategoryObject(); categoria.PadreId = IdCategoryParent; foreach (XmlNode CategoryProperty in ContentObject.ChildNodes) { switch (CategoryProperty.Name) { case "Id": categoria.Id = CategoryProperty.InnerText; break; case "Name": categoria.Nomi = PopolaNomiTreeCategory(CategoryProperty.ChildNodes); break; case "DatasetList": PopolaDataSets_inCategory(CategoryProperty.ChildNodes, ref _datasetsLinear); break; case "ThemeList": List <InternalCategoryObject> SubCategory = new List <InternalCategoryObject>(); RecursivePopulateTreeCategory(categoria.Id, CategoryProperty.ChildNodes, ref SubCategory, ref _categoriesLinear, ref _datasetsLinear); categoria.SubCategory = SubCategory; break; } } categorie.Add(categoria); _categoriesLinear.Add(categoria); } } } catch (SdmxException) { throw; } catch (Exception ex) { throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.InternalError, ex); } }