Ejemplo n.º 1
0
        private TreeNode CreateNode(object element, TreeNodeCollection nodes)
        {
            TreeNode             node     = null;
            IElementALiensReseau eltALien = element as IElementALiensReseau;

            if (eltALien != null)
            {
                node     = new TreeNode(eltALien.Libelle);
                node.Tag = eltALien;
            }
            IEtapeLienReseau etape = element as IEtapeLienReseau;

            if (etape != null)
            {
                if (node == null)
                {
                    node           = new TreeNode(etape.Libelle);
                    node.Tag       = etape;
                    node.BackColor = Color.LightCyan;
                }
            }
            if (node == null)
            {
                return(null);
            }
            nodes.Add(node);
            if (etape != null)
            {
                TreeNode dummy = new TreeNode("");
                dummy.Tag = null;
                node.Nodes.Add(dummy);
            }
            return(node);
        }
Ejemplo n.º 2
0
        //----------------------------------------------
        private void m_btnOk_Click(object sender, EventArgs e)
        {
            if (m_arbre.SelectedNode.Tag == null)
            {
                return;
            }
            m_elementSelectionne = m_arbre.SelectedNode.Tag as IElementALiensReseau;
            TreeNode parent = m_arbre.SelectedNode.Parent;
            List <IEtapeLienReseau> lstEtapes = new List <IEtapeLienReseau>();

            while (parent != null)
            {
                IEtapeLienReseau etape = parent.Tag as IEtapeLienReseau;
                if (etape != null)
                {
                    lstEtapes.Insert(0, etape);
                }
                parent = parent.Parent;
            }
            m_etapes = lstEtapes.ToArray();
            if (m_elementSelectionne != null)
            {
                DialogResult = DialogResult.OK;
                Close();
            }
        }
        protected override void MyDraw(CContextDessinObjetGraphique ctx)
        {
            if (LienReseau == null)
            {
                return;
            }
            if (LienReseau.SchemaReseau == null)
            {
                return;
            }

            ForeColor = Color.Cyan;
            LineWidth = 2;

            //Trouve l'objet de schéma associé à elt 1 et à elt2
            C2iObjetDeSchema objet1 = null;
            C2iObjetDeSchema objet2 = null;

            IElementALiensReseau elt1 = LienReseau.Element1;
            IElementALiensReseau elt2 = LienReseau.Element2;

            bool bTmp = false;

            objet1 = GetObjetElement(elt1, ref bTmp);
            objet2 = GetObjetElement(elt2, ref bTmp);


            if (objet1 == null || objet2 == null)
            {
                return;
            }

            //on interdit de supprimer les éléments à l'extrémité du lien
            objet1.SetNoDelete(true);
            objet2.SetNoDelete(true);

            //calcul des extrémités du lien
            Point pt1 = new Point(objet1.Position.X + objet1.Size.Width / 2,
                                  objet1.Position.Y + objet1.Size.Height / 2);

            Point pt2 = new Point(objet2.Position.X + objet2.Size.Width / 2,
                                  objet2.Position.Y + objet2.Size.Height / 2);


            Position = new Point(Math.Min(pt1.X, pt2.X), Math.Min(pt1.Y, pt2.Y));
            Size     = new Size(Math.Abs(pt2.X - pt1.X), Math.Abs(pt2.Y - pt1.Y));
            //dessin du lien
            Pen pen = new Pen(ForeColor, LineWidth);

            ctx.Graphic.DrawLine(pen, pt1, pt2);
            DrawFleches(ctx, pen, null, pt1, pt2, LienReseau.Direction);



            pen.Dispose();
        }
Ejemplo n.º 4
0
        public CFormSelectionNouveauLien(
            IElementALiensReseau source,
            IElementALiensReseau destination,
            CLienReseau lienSupporte)
        {
            InitializeComponent();
            sc2i.win32.common.CWin32Traducteur.Translate(this);
            m_filtreLiens = GetFiltreListeLiens(source, destination, lienSupporte);

            Init();
        }
Ejemplo n.º 5
0
 public CNoeudDeGrapheReseau GetNoeudForElement(IElementALiensReseau elt, CSchemaReseau schema)
 {
     if (elt is CSite)
     {
         return(GetNoeudForSite(elt as CSite, schema));
     }
     if (elt is CEquipementLogique)
     {
         return(GetNoeudForEquipement(elt as CEquipementLogique, schema));
     }
     return(null);
 }
Ejemplo n.º 6
0
 /// <summary>
 /// Retourne l'extremité opposée à l'extremité demandée.
 /// </summary>
 /// <param name="elt">Si cet élément correspond à l'élément1, retourne l'élement2,
 /// si il correspond à l'élement 2, retourne l'élément 1</param>
 /// <returns></returns>
 public IElementALiensReseau GetAutreExtremite(IElementALiensReseau elt)
 {
     if (elt == null)
     {
         return(null);
     }
     if (elt.Equals(Element1))
     {
         return(Element2);
     }
     if (elt.Equals(Element2))
     {
         return(Element1);
     }
     return(null);
 }
Ejemplo n.º 7
0
        /// <summary>
        /// Indique s'il faut intégrer un lien dans un graphe ou non
        /// </summary>
        /// <param name="lien"></param>
        /// <returns></returns>
        private bool IntegreLienInGraphe(CLienDeGrapheReseau lienDeGraphe)
        {
            CLienReseau lien = new CLienReseau(m_base.ContexteDonnee);

            if (lien.ReadIfExists(lienDeGraphe.IdLienReseau, false))
            {
                IElementALiensReseau elt1 = lien.Element1;
                IElementALiensReseau elt2 = lien.Element2;
                if ((!(elt1 is CSite) && !(elt1 is CEquipementLogique)) || (!(elt2 is CSite) && !(elt2 is CEquipementLogique)))
                {
                    return(false);
                }
                return(true);
            }
            return(false);
        }
Ejemplo n.º 8
0
        public CFiltreData GetFiltreListeLiens(
            IElementALiensReseau element1,
            IElementALiensReseau element2,
            CLienReseau lienSupporte)
        {
            CFiltreData filtre = null;

            if (lienSupporte != null)
            {
                CTypeLienReseau typeLien = lienSupporte.TypeLienReseau;
                StringBuilder   bl       = new StringBuilder();
                if (typeLien != null)
                {
                    foreach (CTypeLienReseauSupport supportant in typeLien.TypesPouvantSupporterCeType)
                    {
                        bl.Append(supportant.TypeSupportant.Id);
                        bl.Append(',');
                    }
                }
                if (bl.Length > 0)
                {
                    bl.Remove(bl.Length - 1, 1);
                    filtre = new CFiltreData(CTypeLienReseau.c_champId + " in (" + bl.ToString() + ")");
                }
            }

            StringBuilder blIdsLiens = new StringBuilder();

            foreach (CLienReseau lien in element1.LiensSortants)
            {
                IElementALiensReseau elt = lien.GetAutreExtremite(element1);
                if (elt != null && elt.Equals(element2))
                {
                    blIdsLiens.Append(lien.Id);
                    blIdsLiens.Append(',');
                }
            }

            if (blIdsLiens.Length > 0)
            {
                blIdsLiens.Remove(blIdsLiens.Length - 1, 1);
                filtre = CFiltreData.GetAndFiltre(filtre, new CFiltreData(
                                                      CLienReseau.c_champId + " in (" + blIdsLiens.ToString() + ")"));
                return(filtre);
            }
            return(null);
        }
Ejemplo n.º 9
0
        public bool HasChemin(IElementALiensReseau elt1, IElementALiensReseau elt2)
        {
            Type typeNoeuds1 = null;

            if (elt1 is CSite)
            {
                typeNoeuds1 = typeof(CNoeudDeGrapheReseauSite);
            }
            else if (elt1 is CEquipementLogique)
            {
                typeNoeuds1 = typeof(CNoeudDeGrapheReseauEquipement);
            }
            else
            {
                return(false);
            }

            Type typeNoeuds2 = null;

            if (elt2 is CSite)
            {
                typeNoeuds2 = typeof(CNoeudDeGrapheReseauSite);
            }
            else if (elt2 is CEquipementLogique)
            {
                typeNoeuds2 = typeof(CNoeudDeGrapheReseauEquipement);
            }
            else
            {
                return(false);
            }

            Dictionary <CNoeudDeGrapheReseau, bool> noeudsUtilises = new Dictionary <CNoeudDeGrapheReseau, bool>();
            CNoeudDeGrapheReseau noeudDepart  = m_baseNoeuds.GetObjet(typeNoeuds1, elt1.Id, m_nIdSchemaReseauRacine);
            CNoeudDeGrapheReseau noeudArrivee = m_baseNoeuds.GetObjet(typeNoeuds2, elt2.Id, m_nIdSchemaReseauRacine);

            if (noeudDepart == null || noeudArrivee == null)
            {
                return(false);
            }
            return(HasChemin(noeudDepart, noeudArrivee, noeudsUtilises));
        }
Ejemplo n.º 10
0
        public static CLienReseau SelectExistant(
            IElementALiensReseau source,
            IElementALiensReseau destination,
            IEtapeLienReseau[] etapesCheminSrc,
            IEtapeLienReseau[] etapesCheminDest,
            CLienReseau lienSupporté,
            ref bool bCreate)
        {
            CLienReseau lien = null;


            bool bCreation = false;

            CFormSelectionNouveauLien frm = new CFormSelectionNouveauLien(source, destination, lienSupporté);

            if (!frm.ListeVide)
            {
                if (frm.ShowDialog() == DialogResult.OK)
                {
                    if (frm.m_bExistant)
                    {
                        lien = (CLienReseau)frm.m_panelListeLiensExistants.ElementSelectionne;
                    }
                    else
                    {
                        bCreation = true;
                    }
                }
            }
            else
            {
                bCreation = true;
            }
            frm.Dispose();



            bCreate = bCreation;
            return(lien);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Retourne le chemin correspondant à l'extremité demandée
        /// </summary>
        /// <param name="elt"></param>
        /// <returns></returns>
        public CCheminLienReseau GetCheminToElement(IElementALiensReseau elt)
        {
            CLienReseau lien = LienReseau;

            if (lien == null)
            {
                return(null);
            }
            if (elt == null)
            {
                return(null);
            }
            if (elt.Equals(lien.Element1))
            {
                return(RacineChemin1);
            }
            if (elt.Equals(lien.Element2))
            {
                return(RacineChemin2);
            }
            return(null);
        }
Ejemplo n.º 12
0
        ///Récupère un noeud dans un sous schéma. Si le sous schema n'existe pas, il est calculé
        //Le data du result contient le noeud
        private CResultAErreur GetNoeudDansSousSchema(IElementALiensReseau element, CCheminLienReseau chemin)
        {
            CResultAErreur result     = CResultAErreur.True;
            CGrapheReseau  sousGraphe = null;
            CSchemaReseau  schemaFils = chemin.EtapeFinale as CSchemaReseau;

            if (schemaFils == null)
            {
                result.EmpileErreur(I.T("Can not find link extremity|20043"));
                return(result);
            }
            result     = CalculeSousGraphe(schemaFils);
            sousGraphe = result.Data as CGrapheReseau;
            if (!result || sousGraphe == null)
            {
                result.EmpileErreur("Erreur in sub diagram @1|20044", schemaFils.Libelle);
                return(result);
            }
            CNoeudDeGrapheReseau noeud = sousGraphe.GetNoeudForElement(element, schemaFils);

            result.Data = noeud;
            return(result);
        }
Ejemplo n.º 13
0
        /// <summary>
        /// Sélectionne une extremité pour l'objet de schéma demandé.
        /// </summary>
        /// <param name="objetDeSchema"></param>
        /// <returns></returns>
        public static IElementALiensReseau SelectExtremite(IElementDeSchemaReseau eltDeSchema, ref IEtapeLienReseau[] etapes)
        {
            if (eltDeSchema == null)
            {
                return(null);
            }
            IEtapeLienReseau     etape    = eltDeSchema as IEtapeLienReseau;
            IElementALiensReseau eltALien = eltDeSchema as IElementALiensReseau;

            if (etape == null)
            {
                return(eltALien);
            }
            IElementALiensReseau[] elementsPossibles = etape.ElementsALiensContenus;
            IEtapeLienReseau[]     etapesPossibles   = etape.EtapesContenues;
            if (elementsPossibles.Length == 0 && etapesPossibles.Length == 0)
            {
                return(eltALien);
            }
            if (eltALien == null && elementsPossibles.Length == 1 && etapesPossibles.Length == 0)
            {
                etapes = new IEtapeLienReseau[] { etape };
                return(elementsPossibles[0]);
            }
            CFormSelectExtremiteDeElementDeSchema form = new CFormSelectExtremiteDeElementDeSchema();

            form.m_elementDeSchemaRacine = eltDeSchema;
            eltALien      = null;
            form.Location = Cursor.Position;
            if (form.ShowDialog() == DialogResult.OK)
            {
                eltALien = form.m_elementSelectionne;
                etapes   = form.m_etapes;
            }
            form.Dispose();
            return(eltALien);
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Indique s'il faut intégrer un lien dans un graphe ou non
        /// </summary>
        /// <param name="lien"></param>
        /// <returns></returns>
        private bool IntegreLienInGraphe(CLienDeGrapheReseau lienDeGraphe)
        {
            CLienReseau lien = new CLienReseau(m_base.ContexteDonnee);

            if (lien.ReadIfExists(lienDeGraphe.IdLienReseau, false))
            {
                IElementALiensReseau elt1 = lien.Element1;
                IElementALiensReseau elt2 = lien.Element2;
                if ((!(elt1 is CSite) && !(elt1 is CEquipementLogique)) || (!(elt2 is CSite) && !(elt2 is CEquipementLogique)))
                {
                    return(false);
                }
                return(true);

                /*if (!(lien.Complement1 is CExtremiteLienSurSite) || !(lien.Complement2 is CExtremiteLienSurSite))
                 *  return false;
                 * CSpvLiai spvLiai = new CSpvLiai(m_base.ContexteDonnee);
                 * if (!spvLiai.ReadIfExists(new CFiltreData(CSpvLiai.c_champSmtLienReseau_Id + "=@1",
                 *  lien.Id), false))
                 *  return false;
                 * return true;*/
            }
            return(false);
        }
Ejemplo n.º 15
0
        internal override void InitFromElementDeSchema(CElementDeSchemaReseau elementDeSchema)
        {
            base.InitFromElementDeSchema(elementDeSchema);
            CLienReseau lien = elementDeSchema.LienReseau;

            if (lien == null)
            {
                throw new Exception("Bad element for supervision data ");
            }
            m_nIdLienSmt = lien.Id;
            CSpvLiai liaisonSpv = CSpvLiai.GetObjetSpvFromObjetTimos(lien);

            if (liaisonSpv != null)
            {
                m_dicLiaisonsSpvConcernant[liaisonSpv.Id] = true;
                m_nIdLienSpv = liaisonSpv.Id;
            }
            /* */
            CSchemaReseau schemaDeLiaison = lien.SchemaReseau;

            if (schemaDeLiaison != null)
            {
                CInfoSchemaDeSchemaSupervise info = new CInfoSchemaDeSchemaSupervise(this, null, m_base, NiveauProfondeur + 1);
                m_listeFils.Add(info);
                info.InitFromSchema(schemaDeLiaison);
            }

            //Si pas de schéma ou que le schéma ne contient pas les sites
            bool bHasElement1         = false;
            bool bHasElement2         = false;
            IElementALiensReseau elt1 = lien.Element1;
            IElementALiensReseau elt2 = lien.Element2;

            if (schemaDeLiaison != null)
            {
                foreach (CElementDeSchemaReseau elt in schemaDeLiaison.ElementsDeSchema)
                {
                    IElementALiensReseau eltAssocie = elt.ElementAssocie as IElementALiensReseau;
                    if (eltAssocie != null && eltAssocie.Equals(elt1))
                    {
                        bHasElement1 = true;
                    }
                    if (eltAssocie != null && eltAssocie.Equals(elt2))
                    {
                        bHasElement2 = true;
                    }
                    if (bHasElement1 && bHasElement2)
                    {
                        break;
                    }
                }
            }
            CSpvSite  site  = new CSpvSite(m_base.ContexteDonnee);
            CSpvEquip equip = new CSpvEquip(m_base.ContexteDonnee);

            if (!bHasElement1)
            {
                if (elt1 is CSite)
                {
                    if (site.ReadIfExists(new CFiltreData(CSpvSite.c_champSmtSite_Id + "=@1", elt1.Id), false))
                    {
                        m_dicSitesSpvConcernant[site.Id] = true;
                    }
                }
                else if (elt1 is CEquipementLogique)
                {
                    if (equip.ReadIfExists(new CFiltreData(CSpvEquip.c_champSmtEquipementLogique_Id + "=@1", elt1.Id), false))
                    {
                        m_dicEquipementsSpvConcernant[equip.Id] = true;
                    }
                }
            }
            if (!bHasElement2)
            {
                if (elt2 is CSite)
                {
                    if (site.ReadIfExists(new CFiltreData(CSpvSite.c_champSmtSite_Id + "=@1", elt2.Id), false))
                    {
                        m_dicSitesSpvConcernant[site.Id] = true;
                    }
                }
                else if (elt2 is CEquipementLogique)
                {
                    if (equip.ReadIfExists(new CFiltreData(CSpvEquip.c_champSmtEquipementLogique_Id + "=@1", elt2.Id), false))
                    {
                        m_dicEquipementsSpvConcernant[equip.Id] = true;
                    }
                }
            }
        }
Ejemplo n.º 16
0
        internal override void InitFromElementDeSchema(CElementDeSchemaReseau elementDeSchema)
        {
            base.InitFromElementDeSchema(elementDeSchema);
            CLienReseau lien = elementDeSchema.LienReseau;

            if (lien == null)
            {
                throw new Exception("Bad element for supervision data ");
            }
            m_dbKeyLien = lien.DbKey;

            CSchemaReseau schemaDeLiaison = lien.SchemaReseau;

            if (schemaDeLiaison != null)
            {
                CInfoSchemaDeSchemaSupervise info = new CInfoSchemaDeSchemaSupervise(this, null, m_base, NiveauProfondeur + 1);
                m_listeFils.Add(info);
                info.InitFromSchema(schemaDeLiaison);
            }

            //Si pas de schéma ou que le schéma ne contient pas les sites
            bool bHasElement1         = false;
            bool bHasElement2         = false;
            IElementALiensReseau elt1 = lien.Element1;
            IElementALiensReseau elt2 = lien.Element2;

            if (schemaDeLiaison != null)
            {
                foreach (CElementDeSchemaReseau elt in schemaDeLiaison.ElementsDeSchema)
                {
                    IElementALiensReseau eltAssocie = elt.ElementAssocie as IElementALiensReseau;
                    if (eltAssocie != null && eltAssocie.Equals(elt1))
                    {
                        bHasElement1 = true;
                    }
                    if (eltAssocie != null && eltAssocie.Equals(elt2))
                    {
                        bHasElement2 = true;
                    }
                    if (bHasElement1 && bHasElement2)
                    {
                        break;
                    }
                }
            }
            IElementALiensReseau extremite = lien.Element1;

            if (extremite is CSite)
            {
                m_dicSitesConcernant[extremite.DbKey] = true;
            }
            if (extremite is CEquipementLogique)
            {
                m_dicEquipementsConcernant[extremite.DbKey] = true;
            }
            extremite = lien.Element2;
            if (extremite is CSite)
            {
                m_dicSitesConcernant[extremite.DbKey] = true;
            }
            if (extremite is CEquipement)
            {
                m_dicEquipementsConcernant[extremite.DbKey] = true;
            }
            m_dicLiaisonsConcernant[lien.DbKey] = true;
        }
Ejemplo n.º 17
0
        //-------------------------------------------------------------------
        public override CResultAErreur VerifieDonnees(CObjetDonnee objet)
        {
            CResultAErreur result = CResultAErreur.True;

            try
            {
                CLienReseau lien = (CLienReseau)objet;

                // Verifie le champ "Libelle
                if (lien.Libelle == "")
                {
                    result.EmpileErreur(I.T("Network link label cannot be empty|30004"));
                }



                bool bTrouve = false;


                if (lien.Element1 == null)
                {
                    result.EmpileErreur(I.T("The linked element 1 cannot be null|30019"));
                }
                else
                {
                    if (lien.Element1.GetType() != lien.TypeLienReseau.TypeElement1)
                    {
                        result.EmpileErreur(I.T("The linked element 1 is not of the right type|30016"));
                    }

                    if (lien.Complement1 != null)
                    {
                        foreach (CObjetDonnee obj in lien.Element1.ComplementsPossibles)
                        {
                            if (obj == (CObjetDonnee)lien.Complement1)
                            {
                                bTrouve = true;
                                break;
                            }
                        }
                        if (!bTrouve)
                        {
                            result.EmpileErreur(I.T("Complementary element 1 does not belong to the possible complements of the element 1|30014"));
                        }
                    }
                }
                bTrouve = false;

                if (lien.Element2 == null)
                {
                    result.EmpileErreur(I.T("The linked element 2 cannot be null|30020"));
                }
                else
                {
                    if (lien.Element2.GetType() != lien.TypeLienReseau.TypeElement2)
                    {
                        result.EmpileErreur(I.T("The linked element 2 is not of the right type|30017"));
                    }

                    if (lien.Complement2 != null)
                    {
                        foreach (CObjetDonnee obj in lien.Element2.ComplementsPossibles)
                        {
                            if (obj == (CObjetDonnee)lien.Complement2)
                            {
                                bTrouve = true;
                                break;
                            }
                        }
                        if (!bTrouve)
                        {
                            result.EmpileErreur(I.T("Complementary element 2 does not belong to the possible complements of the element 2|30014"));
                        }
                    }
                }

                if (lien.Row.HasVersion(DataRowVersion.Original))
                {
                    //Si changement de l'élément 1
                    lien.VersionToReturn = DataRowVersion.Original;
                    IElementALiensReseau eltOriginal = lien.Element1;
                    lien.VersionToReturn = DataRowVersion.Current;
                    IElementALiensReseau eltNew = lien.Element1;
                    if (eltNew != null && eltOriginal != null && eltNew.Equals(eltOriginal))
                    {
                        //Vérifie qu'il n'y a pas de chemin sur l'élément 1
                        CListeObjetsDonnees lst = new CListeObjetsDonnees(objet.ContexteDonnee, typeof(CElementDeSchemaReseau));
                        lst.Filtre = new CFiltreData(CLienReseau.c_champId + "=@1", lien.Id);
                        bool bOk = true;
                        foreach (CElementDeSchemaReseau elt in lst)
                        {
                            if (elt.RacineChemin1 != null)
                            {
                                bOk = false;
                                break;
                            }
                        }
                        if (!bOk)
                        {
                            result.EmpileErreur(I.T("The linked element 1 cannot be changed because the link is associted with a path|30022"));
                        }
                    }

                    //Si changement de l'élément 2
                    lien.VersionToReturn = DataRowVersion.Original;
                    eltOriginal          = lien.Element2;
                    lien.VersionToReturn = DataRowVersion.Current;
                    eltNew = lien.Element2;
                    if (eltNew != null && eltOriginal != null && eltNew.Equals(eltOriginal))
                    {
                        //Vérifie qu'il n'y a pas de chemin sur l'élément 2
                        CListeObjetsDonnees lst = new CListeObjetsDonnees(objet.ContexteDonnee, typeof(CElementDeSchemaReseau));
                        lst.Filtre = new CFiltreData(CLienReseau.c_champId + "=@1", lien.Id);
                        bool bOk = true;
                        foreach (CElementDeSchemaReseau elt in lst)
                        {
                            if (elt.RacineChemin2 != null)
                            {
                                bOk = false;
                                break;
                            }
                        }
                        if (!bOk)
                        {
                            result.EmpileErreur(I.T("The linked element 2 cannot be changed because the link is associted with a path|30023"));
                        }
                    }
                }
            }


            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
            }

            return(result);
        }
Ejemplo n.º 18
0
        /// <summary>
        /// Calcule un graphe pour un schéma donné
        /// </summary>
        /// <param name="schema"></param>
        /// <param name="sens"></param>
        /// <returns></returns>
        public CResultAErreur CalculeGraphe(
            CSchemaReseau schema,
            ESensAllerRetourLienReseau?sens)
        {
            CResultAErreur result = CResultAErreur.True;

            m_baseDeGraphes.AddGrapheReseau(schema.Id, sens, this);
            m_sensGraphe            = sens;
            m_nIdSchemaReseauRacine = schema.Id;
            m_baseLiens.Clear();
            m_baseNoeuds.Clear();
            m_dicSuccesseurs.Clear();
            m_dicPredecesseurs.Clear();
            Dictionary <int, CNoeudDeGrapheReseauSite>       dicIdSiteToNoeud       = new Dictionary <int, CNoeudDeGrapheReseauSite>();
            Dictionary <int, CNoeudDeGrapheReseauEquipement> dicIdEquipementToNoeud = new Dictionary <int, CNoeudDeGrapheReseauEquipement>();

            foreach (CElementDeSchemaReseau elt in schema.ElementsDeSchema)//Ne prend que les éléments de premier niveau
            {
                CSite site = elt.ElementAssocie as CSite;
                if (site != null)
                {
                    CNoeudDeGrapheReseauSite noeud = new CNoeudDeGrapheReseauSite(site.Id, schema.Id, elt.IsCableALinterieur);
                    if (!m_baseNoeuds.Contains(noeud))
                    {
                        if (IntegreNoeud == null || IntegreNoeud(noeud))
                        {
                            m_baseNoeuds.Add(noeud);
                            dicIdSiteToNoeud[site.Id] = noeud;
                        }
                    }
                }
                else
                {
                    CEquipementLogique eqpt = elt.ElementAssocie as CEquipementLogique;
                    if (eqpt != null)
                    {
                        CNoeudDeGrapheReseauEquipement noeud = new CNoeudDeGrapheReseauEquipement(eqpt.Id, schema.Id);
                        if (!m_baseNoeuds.Contains(noeud))
                        {
                            if (IntegreNoeud == null || IntegreNoeud(noeud))
                            {
                                m_baseNoeuds.Add(noeud);
                                dicIdEquipementToNoeud[eqpt.Id] = noeud;
                            }
                        }
                    }
                }
            }

            Dictionary <int, CGrapheReseau> dicGraphesCalcules = new Dictionary <int, CGrapheReseau>();

            foreach (CElementDeSchemaReseau elt in schema.GetElementsForType <CLienReseau>())
            {
                if (elt.SchemaReseau.Id == schema.Id) //Ne prend pas les sous schémas
                {
                    CLienReseau lien = elt.ElementAssocie as CLienReseau;
                    if (lien != null)
                    {
                        if (m_sensGraphe != null)
                        {
                            CDonneeDessinLienDeSchemaReseau donneeDessin = elt.DonneeDessin as CDonneeDessinLienDeSchemaReseau;
                            if (donneeDessin == null)
                            {
                                continue;
                            }
                            if (m_sensGraphe.Value != donneeDessin.Forward_Backward)
                            {
                                continue;
                            }
                        }
                        EDirectionLienReseau[] directions = new EDirectionLienReseau[]
                        {
                            EDirectionLienReseau.UnVersDeux,
                            EDirectionLienReseau.DeuxVersUn
                        };
                        foreach (EDirectionLienReseau direction in directions)
                        {
                            if (direction == lien.Direction.Code || lien.Direction == EDirectionLienReseau.Bidirectionnel)
                            {
                                int nSigne = direction == EDirectionLienReseau.UnVersDeux ? 1 : -1;
                                IElementALiensReseau elt1    = null;
                                IElementALiensReseau elt2    = null;
                                CCheminLienReseau    chemin1 = null;
                                CCheminLienReseau    chemin2 = null;
                                if (direction == EDirectionLienReseau.UnVersDeux)
                                {
                                    elt1    = lien.Element1;
                                    chemin1 = elt.RacineChemin1;
                                    elt2    = lien.Element2;
                                    chemin2 = elt.RacineChemin2;
                                }
                                else if (direction == EDirectionLienReseau.DeuxVersUn)
                                {
                                    elt1    = lien.Element2;
                                    chemin1 = elt.RacineChemin2;
                                    elt2    = lien.Element1;
                                    chemin2 = elt.RacineChemin2;
                                }
                                if (!(elt1 is CSite) && !(elt1 is CEquipementLogique))
                                {
                                    elt1 = null;
                                }
                                if (!(elt2 is CSite) && !(elt2 is CEquipementLogique))
                                {
                                    elt2 = null;
                                }
                                if (elt1 != null && elt2 != null)
                                {
                                    CNoeudDeGrapheReseau noeud1 = null;
                                    if (chemin1 != null)
                                    {
                                        result = GetNoeudDansSousSchema(elt1, chemin1);//Result testé ensuite avec noeud1 = null;
                                        noeud1 = result.Data as CNoeudDeGrapheReseau;
                                    }
                                    else
                                    {
                                        if (elt1 is CSite)
                                        {
                                            CNoeudDeGrapheReseauSite noeudSite = null;
                                            dicIdSiteToNoeud.TryGetValue(elt1.Id, out noeudSite);
                                            noeud1 = noeudSite;
                                        }
                                        else if (elt1 is CEquipementLogique)
                                        {
                                            CNoeudDeGrapheReseauEquipement noeudEqpt = null;
                                            dicIdEquipementToNoeud.TryGetValue(elt1.Id, out noeudEqpt);
                                            noeud1 = noeudEqpt;
                                        }
                                    }
                                    if (noeud1 == null)
                                    {
                                        result.EmpileErreur(I.T("Can not find link @1 extremity|20043", lien.Libelle));
                                        return(result);
                                    }

                                    CNoeudDeGrapheReseau noeud2 = null;
                                    if (chemin2 != null)
                                    {
                                        result = GetNoeudDansSousSchema(elt2, chemin2);//Result testé ensuite avec noeud2= null;
                                        noeud2 = result.Data as CNoeudDeGrapheReseau;
                                    }
                                    else
                                    {
                                        if (elt2 is CSite)
                                        {
                                            CNoeudDeGrapheReseauSite noeudSite = null;
                                            dicIdSiteToNoeud.TryGetValue(elt2.Id, out noeudSite);
                                            noeud2 = noeudSite;
                                        }
                                        else if (elt2 is CEquipementLogique)
                                        {
                                            CNoeudDeGrapheReseauEquipement noeudEquip = null;
                                            dicIdEquipementToNoeud.TryGetValue(elt2.Id, out noeudEquip);
                                            noeud2 = noeudEquip;
                                        }
                                    }
                                    if (noeud2 == null)
                                    {
                                        result.EmpileErreur(I.T("Can not find link @1 extremity|20043", lien.Libelle));
                                        return(result);
                                    }

                                    CLienDeGrapheReseau lienDeGraphe = m_baseLiens.GetObjet(typeof(CLienDeGrapheReseau), nSigne * lien.Id, schema.Id);
                                    if (lienDeGraphe == null)
                                    {
                                        CEtapesExtremiteLienDeGraphe etapes1 = null;
                                        if (chemin1 != null)
                                        {
                                            etapes1 = new CEtapesExtremiteLienDeGraphe(chemin1);
                                        }
                                        CEtapesExtremiteLienDeGraphe etapes2 = null;
                                        if (chemin2 != null)
                                        {
                                            etapes2 = new CEtapesExtremiteLienDeGraphe(chemin2);
                                        }

                                        lienDeGraphe = new CLienDeGrapheReseau(
                                            nSigne * lien.Id,
                                            schema.Id,
                                            noeud1,
                                            noeud2,
                                            etapes1,
                                            etapes2);
                                        if (IntegreLiaison == null || IntegreLiaison(lienDeGraphe))
                                        {
                                            m_baseLiens.Add(lienDeGraphe);
                                            m_dicSuccesseurs.AddSuccesseur(noeud1, lienDeGraphe);
                                            m_dicPredecesseurs.AddPredecesseur(noeud2, lienDeGraphe);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(result);
        }