예제 #1
0
        private void FillDicsForNode(CElementDeArbreOperationnel node,
                                     CDictionnaireElementToNoeudArbre dicEquipementToNoeudArbreOp,
                                     CDictionnaireElementToNoeudArbre dicSiteToNoeudArbreOp,
                                     CDictionnaireElementToNoeudArbre dicLiaisonToNoeudArbreOp,
                                     CDictionnaireElementToNoeudArbre dicServiceToNoeudArbreOp)
        {
            CElementDeArbreOperationnelEntite noeudEntite = node as CElementDeArbreOperationnelEntite;

            if (noeudEntite != null)
            {
                try
                {
                    IElementDeSchemaReseau eltAssocie = noeudEntite.Composant.GetElementAssocie(m_base.ContexteDonnee);

                    if (eltAssocie is CEquipementLogique)
                    {
                        CSpvEquip equipement = CSpvEquip.GetObjetSpvFromObjetTimos((CEquipementLogique)eltAssocie);
                        if (equipement != null)
                        {
                            dicEquipementToNoeudArbreOp.Add(equipement.Id, noeudEntite);
                        }
                    }
                    else if (eltAssocie is CSite)
                    {
                        CSpvSite site = CSpvSite.GetObjetSpvFromObjetTimos((CSite)eltAssocie);
                        if (site != null)
                        {
                            dicSiteToNoeudArbreOp.Add(site.Id, noeudEntite);
                        }
                    }
                    else if (eltAssocie is CLienReseau)
                    {
                        CSpvLiai liaison = CSpvLiai.GetObjetSpvFromObjetTimos((CLienReseau)eltAssocie);
                        if (liaison != null)
                        {
                            dicLiaisonToNoeudArbreOp.Add(liaison.Id, noeudEntite);
                        }
                    }
                    else if (eltAssocie is CSchemaReseau)
                    {
                        CSpvSchemaReseau schema = CSpvSchemaReseau.GetObjetSpvFromObjetTimos((CSchemaReseau)eltAssocie);
                        if (schema != null)
                        {
                            dicServiceToNoeudArbreOp.Add(schema.Id, noeudEntite);
                        }
                    }
                }
                catch { }
            }

            // Fonction récursive sur les noeuds fils
            foreach (CElementDeArbreOperationnel nodeFils in node.Fils)
            {
                FillDicsForNode(nodeFils,
                                dicEquipementToNoeudArbreOp,
                                dicSiteToNoeudArbreOp,
                                dicLiaisonToNoeudArbreOp,
                                dicServiceToNoeudArbreOp);
            }
        }
예제 #2
0
        public override CResultAErreur TraitementAvantSauvegarde(CContexteDonnee contexte)
        {
            CResultAErreur result = base.TraitementAvantSauvegarde(contexte);

            if (!result)
            {
                return(result);
            }

            DataTable table = contexte.Tables[GetNomTable()];

            if (table == null)
            {
                return(result);
            }

            ArrayList lstRows = new System.Collections.ArrayList(table.Rows);

            foreach (DataRow row in lstRows)
            {
                if (row.RowState == DataRowState.Added)
                {
                    CSpvLiai     spvLiai    = new CSpvLiai(row);
                    CSpvLiai_Rep spvLiaiRep = new CSpvLiai_Rep(contexte);
                    if (!spvLiaiRep.ReadIfExists(new CFiltreData(CSpvLiai_Rep.c_champLIAI_ID + "=@1", spvLiai.Id)))
                    {
                        spvLiaiRep.CreateNewInCurrentContexte(new object[] { spvLiai.Id });
                        spvLiaiRep.SpvLiai = spvLiai;
                        spvLiaiRep.CodeEtatOperationnel = (Int32?)EEtatOperationnel.OK;
                    }
                }
            }
            return(result);
        }
예제 #3
0
        private static void MajSpvLiaiLiaiC(CElementDeSchemaReseau element)
        {
            if (element == null)
            {
                return;
            }
            if (element.LienReseau != null && element.SchemaReseau != null &&
                element.SchemaReseau.LienReseau != null)
            {
                //C'est une dépendance de lien à lien
                //Cherche si la dépendance existe déjà
                CSpvLiai_Liaic dep           = new CSpvLiai_Liaic(element.ContexteDonnee);
                CSpvLiai       liaiSupportée = null;
                if (CSpvLiai.CanSupervise(element.SchemaReseau.LienReseau))
                {
                    liaiSupportée = CSpvLiai.GetObjetSpvFromObjetTimosAvecCreation(element.SchemaReseau.LienReseau);
                }

                CSpvLiai liaiSupportant = null;
                if (CSpvLiai.CanSupervise(element.LienReseau))
                {
                    liaiSupportant = CSpvLiai.GetObjetSpvFromObjetTimosAvecCreation(element.LienReseau);
                }
                if (liaiSupportée != null && liaiSupportant != null)
                {
                    if (!dep.ReadIfExists(new CFiltreData(CSpvLiai_Liaic.c_champIdLiaisonSupportée + "=@1 and " +
                                                          CSpvLiai_Liaic.c_champIdLiaisonSupportant + "=@2",
                                                          liaiSupportée.Id,
                                                          liaiSupportant.Id)))
                    {
                        dep.CreateNewInCurrentContexte(new object[] { liaiSupportée.Id, liaiSupportant.Id });
                    }
                }
            }
        }
예제 #4
0
파일: CGraphe.cs 프로젝트: ykebaili/Timos
 public void CreateGraphe(CSchemaReseau schema)
 {
     m_liens.Clear();
     m_noeuds.Clear();
     //Création des noeuds
     foreach (CSite site in schema.GetElementsLies <CSite>())
     {
         CSpvSite spvSite = CSpvSite.GetObjetSpvFromObjetTimos(site);
         if (spvSite != null)
         {
             if (GetNoeud(spvSite) == null)
             {
                 m_noeuds.Add(new CNoeud(spvSite));
             }
         }
     }
     foreach (CLienReseau lien in schema.GetElementsLies <CLienReseau>())
     {
         CSpvLiai spvLiai = CSpvLiai.GetSpvLiaiFromLienReseau(lien) as CSpvLiai;
         if (spvLiai != null)
         {
             CNoeud noeud1 = GetNoeud(spvLiai.SiteOrigine);
             CNoeud noeud2 = GetNoeud(spvLiai.SiteDestination);
             if (noeud1 != null && noeud2 != null)
             {
                 m_liens.Add(new CLien(spvLiai, noeud1, noeud2));
             }
         }
     }
 }
예제 #5
0
        public static void OnModificationSchemaReseau(CContexteDonnee contexte, Hashtable tableData, ref CResultAErreur result)
        {
            DataTable table = contexte.Tables[CElementDeSchemaReseau.c_nomTable];

            if (table == null)
            {
                return;
            }
            //Id de schéma->true si modifié
            Dictionary <int, bool> dicSchemasModifies = new Dictionary <int, bool>();

            foreach (DataRow row in table.Rows)
            {
                switch (row.RowState)
                {
                case DataRowState.Added:
                case DataRowState.Modified:
                    if (row[CElementDeSchemaReseau.c_champIdSchemaReseauAuquelJappartiens] != DBNull.Value)
                    {
                        dicSchemasModifies[(int)row[CElementDeSchemaReseau.c_champIdSchemaReseauAuquelJappartiens]] = true;
                    }
                    break;

                case DataRowState.Deleted:
                    if (row[CElementDeSchemaReseau.c_champIdSchemaReseauAuquelJappartiens, DataRowVersion.Original] != DBNull.Value)
                    {
                        dicSchemasModifies[(int)row[CElementDeSchemaReseau.c_champIdSchemaReseauAuquelJappartiens, DataRowVersion.Original]] = true;
                    }
                    break;
                }
            }
            foreach (int nIdSchema in dicSchemasModifies.Keys)
            {
                CSchemaReseau schema = new CSchemaReseau(contexte);
                if (schema.ReadIfExists(nIdSchema))
                {
                    if (schema.LienReseau != null)
                    {
                        if (CSpvLiai.CanSupervise(schema.LienReseau))
                        {
                            CSpvLiai spvLien = CSpvLiai.GetSpvLiaiFromLienReseauAvecCreation(schema.LienReseau);
                            if (spvLien != null)
                            {
                                result = spvLien.UpdateCablages();
                                if (result)
                                {
                                    spvLien.UpdateSupportants();
                                }

                                if (!result)
                                {
                                    return;
                                }
                            }
                        }
                    }
                }
            }
            return;
        }
예제 #6
0
        public static void PropagerDependanceLien(CContexteDonnee contexte, Hashtable tableData, ref CResultAErreur result)
        {
            DataTable dt = contexte.Tables[CElementDeSchemaReseau.c_nomTable];

            if (dt != null)
            {
                ArrayList rows = new ArrayList(dt.Rows);
                foreach (DataRow row in rows)
                {
                    if (row.RowState != DataRowState.Unchanged)
                    {
                        CElementDeSchemaReseau element = new CElementDeSchemaReseau(row);

                        switch (row.RowState)
                        {
                        case DataRowState.Added:
                        case DataRowState.Modified:
                            if (element != null && element.LienReseau != null &&
                                element.SchemaReseau != null && element.SchemaReseau.LienReseau != null)
                            {
                                //Il s'agit bien d'une liaison dans une liaisons
                                MajSpvLiaiLiaiC(element);
                            }
                            break;

                        case DataRowState.Deleted:
                            element.VersionToReturn = DataRowVersion.Original;
                            CLienReseau lienSupportant = element.LienReseau;
                            if (lienSupportant != null && lienSupportant.IsValide())
                            {
                                CSchemaReseau schema = element.SchemaReseau;
                                if (schema.Row.RowState == DataRowState.Deleted)
                                {
                                    schema.VersionToReturn = DataRowVersion.Original;
                                }
                                CLienReseau lienSupporte = schema.LienReseau;
                                if (lienSupporte != null && lienSupporte.IsValide())    //Il s'agit bien d'un élément support/supportant
                                {
                                    CSpvLiai liaiSupportant = CSpvLiai.GetSpvLiaiFromLienReseau(lienSupportant) as CSpvLiai;
                                    if (liaiSupportant != null)
                                    {
                                        liaiSupportant.UpdateSupportés();
                                    }
                                }
                            }
                            break;

                        default:
                            break;
                        }
                    }
                }
            }
        }
예제 #7
0
        public CSpvLiai GetSpvLiai(CContexteDonnee contexteDonnee)
        {
            CSpvLiai liai = new CSpvLiai(contexteDonnee);

            if (liai.ReadIfExists(m_nId))
            {
                return(liai);
            }

            return(null);
        }
예제 #8
0
        public override sc2i.common.CResultAErreur MyInitChamps()
        {
            if (ObjetEdite is CLienReseau)
            {
                m_spvLiai = CSpvLiai.GetSpvLiaiFromLienReseau(ObjetEdite as CLienReseau) as CSpvLiai;
            }
            CResultAErreur result = base.MyInitChamps();

            if (!result)
            {
                return(result);
            }

            if (result && m_spvLiai != null)
            {
                m_PanelTypeAccessAlarm.InitFromListeObjets(
                    m_spvLiai.SpvTypeAccessAlarm,
                    typeof(CSpvTypeAccesAlarme),
                    typeof(CFormEditionTypeAccesAlarmeBoucle),
                    m_spvLiai,
                    "SpvLiai");

                m_CablageAccesAlarm.InitFromListeObjets(
                    m_spvLiai.AlarmesCables,
                    typeof(CSpvLienAccesAlarme),
                    typeof(CFormEditionCablageAccesAlarmeBoucle),
                    m_spvLiai,
                    "SpvLiai");
            }

            if (m_spvLiai == null)
            {
                CFiltreDataImpossible filtreImpossible = new CFiltreDataImpossible();
                CListeObjetsDonnees   listeVideAlarme  = new CListeObjetsDonnees(ObjetEdite.ContexteDonnee, typeof(CSpvTypeAccesAlarme));
                CListeObjetsDonnees   listeVideAccesc  = new CListeObjetsDonnees(ObjetEdite.ContexteDonnee, typeof(CSpvLienAccesAlarme));
                listeVideAlarme.Filtre = filtreImpossible;
                listeVideAccesc.Filtre = filtreImpossible;

                m_PanelTypeAccessAlarm.InitFromListeObjets(
                    listeVideAlarme,
                    typeof(CSpvTypeAccesAlarme),
                    typeof(CFormEditionTypeAccesAlarmeBoucle),
                    null,
                    "SpvLiai");

                m_CablageAccesAlarm.InitFromListeObjets(
                    listeVideAccesc,
                    typeof(CSpvLienAccesAlarme),
                    typeof(CFormEditionCablageAccesAlarmeBoucle),
                    null,
                    "SpvLiai");
            }
            return(result);
        }//MyInitChamps()
예제 #9
0
        private static CSpvLiai GetSpvLiai(DataRow row)
        {
            CSpvLiai    spvLiai;
            CLienReseau lienReseau = new CLienReseau(row);

            spvLiai = CSpvLiai.GetSpvLiaiFromLienReseau(lienReseau) as CSpvLiai;
            if (spvLiai == null)
            {
                spvLiai = CSpvLiai.GetSpvLiaiFromLienReseauAvecCreation(lienReseau);
            }
            // spvLiai.CopyFromLienReseau(lienReseau);
            spvLiai.CopyFromObjetTimos(lienReseau);
            return(spvLiai);
        }
예제 #10
0
        }//MyInitChamps()

        public override sc2i.common.CResultAErreur MyMajChamps()
        {
            CResultAErreur result = base.MyMajChamps();

            if (!result)
            {
                return(result);
            }

            if (LeLienReseau != null && m_spvLiai == null && m_extModeEdition.ModeEdition)
            {
                m_spvLiai = CSpvLiai.GetSpvLiaiFromLienReseauAvecCreation(LeLienReseau);
            }



            return(result);
        }
        /// <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))
            {
                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);
        }
예제 #12
0
        ////////////////////////////////////////////////////////////////////
        public static void PropagerCLienReseau(CContexteDonnee contexte, Hashtable tableData, ref CResultAErreur result)
        {
            ///Pour éviter de traiter plusieurs fois une liaisons lors d'une sauvegarde
            Dictionary <DataRow, bool> rowsDejaTraitees = (Dictionary <DataRow, bool>)tableData[typeof(CSpvLiaiServeur)];

            if (rowsDejaTraitees == null)
            {
                rowsDejaTraitees = new Dictionary <DataRow, bool>();
                tableData[typeof(CSpvLiaiServeur)] = rowsDejaTraitees;
            }

            DataTable dt = contexte.Tables[CLienReseau.c_nomTable];

            if (dt != null)
            {
                ArrayList rows = new ArrayList(dt.Rows);

                foreach (DataRow row in rows)
                {
                    if (row.RowState != DataRowState.Unchanged)
                    {
                        if (!rowsDejaTraitees.ContainsKey(row))
                        {
                            rowsDejaTraitees[row] = true;
                            switch (row.RowState)
                            {
                            case DataRowState.Added:
                            case DataRowState.Modified:
                                CLienReseau lienTimos = new CLienReseau(row);
                                //force la création du schéma pour qu'il se synchronise
                                lienTimos.GetSchemaReseauADessiner(true);
                                CSpvLiai lienSpv = CSpvLiai.GetSpvLiaiFromLienReseau(lienTimos) as CSpvLiai;

                                result = CSpvLiai.CanSupervise(lienTimos);
                                if (lienSpv != null)
                                {
                                    if (row.HasVersion(DataRowVersion.Original))
                                    {
                                        if (!row[CTypeLienReseau.c_champId].Equals(row[CTypeLienReseau.c_champId, DataRowVersion.Original]))
                                        {
                                            //CSpvTypliai typeLiai = CSpvTypliai.GetSpvTypliaiFromTypeLienReseau(lienTimos.TypeLienReseau) as CSpvTypliai;
                                            CSpvTypliai typeLiai = CSpvTypliai.GetObjetSpvFromObjetTimos(lienTimos.TypeLienReseau) as CSpvTypliai;
                                            if (typeLiai == null)
                                            {
                                                result = lienSpv.Delete(true);
                                                if (!result)
                                                {
                                                    result.EmpileErreur("Can not cancel supervision of link @1|20005", lienTimos.Libelle);
                                                    return;
                                                }
                                            }
                                            else
                                            {
                                                lienSpv.NomTypeLiaison = typeLiai.Libelle;
                                            }
                                        }
                                    }
                                    if (!result)
                                    {
                                        result.EmpileErreur(I.T("Invalide properties for supervised link @1|20004", lienTimos.Libelle));
                                        return;
                                    }
                                    if (lienSpv != null && lienSpv.IsValide())
                                    {
                                        //   lienSpv.CopyFromLienReseau(lienTimos);
                                        lienSpv.CopyFromObjetTimos(lienTimos);
                                    }
                                }
                                else
                                {
                                    if (result)
                                    {
                                        //Création de la liaison SPV
                                        CSpvLiai liai = GetSpvLiai(row);
                                    }
                                    else
                                    {
                                        //CSpvTypliai typeLiai = CSpvTypliai.GetSpvTypliaiFromTypeLienReseau(lienTimos.TypeLienReseau) as CSpvTypliai;

                                        /*CSpvTypliai typeLiai = CSpvTypliai.GetObjetSpvFromObjetTimos(lienTimos.TypeLienReseau) as CSpvTypliai;
                                         * if (typeLiai == null)*/
                                        result = CResultAErreur.True;
                                    }
                                }
                                break;

                            default:
                                break;
                            }
                        }
                    }
                }
            }
        }
예제 #13
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;
                    }
                }
            }
        }
예제 #14
0
파일: CLien.cs 프로젝트: ykebaili/Timos
 public CLien(CSpvLiai liaison, CNoeud noeudDepart, CNoeud noeudArrivee)
 {
     m_liaison      = liaison;
     m_noeudArrivee = noeudArrivee;
     m_noeudDepart  = noeudDepart;
 }
예제 #15
0
 public CPassageChemin(CSpvSite siteSource, CSpvLiai liaiUtilisee)
 {
     m_siteSource   = siteSource;
     m_liaiUtilisee = liaiUtilisee;
 }