//-------------------------------------------------------
        public COptionRechercheType GetOption(Type tp)
        {
            COptionRechercheType option = null;

            m_dicTypesAOption.TryGetValue(tp, out option);
            return(option);
        }
 //-------------------------------------------------------
 public void AddOption(COptionRechercheType option)
 {
     if (option != null && option.Type != null)
     {
         m_dicTypesAOption[option.Type] = option;
         m_setTypesIgnores.Remove(option.Type);
     }
 }
Exemplo n.º 3
0
        //-----------------------------------------------------------------------------------
        public List <CReferenceObjetDependant> GetAllDependances(IEnumerable <CObjetDonnee> lstObjets, OnFournisseurTermine funcOnEachFournisseur)
        {
            HashSet <CReferenceObjetDependant> setDependances = new HashSet <CReferenceObjetDependant>();

            HashSet <CReferenceObjetDonnee> setExplores = new HashSet <CReferenceObjetDonnee>();

            HashSet <CReferenceObjetDonnee> objetsToExplore = new HashSet <CReferenceObjetDonnee>();

            foreach (CObjetDonnee objet in lstObjets)
            {
                objetsToExplore.Add(new CReferenceObjetDonnee(objet));
            }


            while (objetsToExplore.Count > 0)
            {
                HashSet <CReferenceObjetDonnee> newToDo = new HashSet <CReferenceObjetDonnee>();
                foreach (CReferenceObjetDonnee refToDo in objetsToExplore)
                {
                    if (!setExplores.Contains(refToDo.GetCloneReferenceObjetDonnee()))
                    {
                        setExplores.Add(refToDo.GetCloneReferenceObjetDonnee());
                        CObjetDonnee objetToExplore = refToDo.GetObjet(lstObjets.ElementAt(0).ContexteDonnee);
                        m_indicateurProgression.SetInfo(I.T("Exploring @1|20016", objetToExplore.DescriptionElement));
                        foreach (Type tpFournisseur in m_listeFournisseurs)
                        {
                            IFournisseurDependancesObjetDonnee fournisseur      = Activator.CreateInstance(tpFournisseur) as IFournisseurDependancesObjetDonnee;
                            HashSet <CReferenceObjetDependant> setDeFournisseur = new HashSet <CReferenceObjetDependant>();
                            foreach (CReferenceObjetDependant reference in fournisseur.GetDependances(this, objetToExplore))
                            {
                                CReferenceObjetDonnee rf = reference.GetCloneReferenceObjetDonnee();
                                if (!setExplores.Contains(rf))
                                {
                                    COptionRechercheType option = ConfigurationRecherche.GetOption(rf.TypeObjet);
                                    if (option != null && option.RecursiveSearch)
                                    {
                                        newToDo.Add(rf);
                                    }
                                }
                                if (!setDependances.Contains(reference))
                                {
                                    setDependances.Add(reference);
                                    setDeFournisseur.Add(reference);
                                }
                            }
                            if (funcOnEachFournisseur != null)
                            {
                                funcOnEachFournisseur(setDeFournisseur);
                            }
                        }
                    }
                }
                objetsToExplore = newToDo;
            }


            List <CReferenceObjetDependant> lst = new List <CReferenceObjetDependant>();

            foreach (CReferenceObjetDependant reference in setDependances)
            {
                lst.Add(reference);
            }
            return(lst);
        }