示例#1
0
        //----------------------------------------------------------------
        private static void UpdateOptimizedDb()
        {
            CDataHotel hotel = null;

            if (m_database != null)
            {
                CListeEntitesDeMemoryDb <CDataHotel> lst = new CListeEntitesDeMemoryDb <CDataHotel>(m_database);
                if (lst.Count() > 0)
                {
                    hotel = lst.ElementAt(0);
                }
            }
            m_optimizedDb = new CDataRoomOptimizedDataBase(hotel);
        }
示例#2
0
        //--------------------------------------------------------
        public static CDataRoom GetRoomFor(string strIdEntite, CMemoryDb db)
        {
            string strRoomId = "";

            if (m_cacheDispatch.TryGetValue(strIdEntite, out strRoomId))
            {
                CDataRoom room = new CDataRoom(db);
                if (room.ReadIfExist(strRoomId))
                {
                    return(room);
                }
            }
            CListeEntitesDeMemoryDb <CDataDispatch> lstDispatch = new CListeEntitesDeMemoryDb <CDataDispatch>(db);

            lstDispatch.Filtre = new CFiltreMemoryDb(CDataDispatch.c_champStartEntityId + " like @1", strIdEntite[0] + "%");
            lstDispatch.Sort   = CDataDispatch.c_champStartEntityId + " desc";
            CDataRoom roomDest = null;

            foreach (CDataDispatch dd in lstDispatch)
            {
                if (strIdEntite.StartsWith(dd.StartEntityId))
                {
                    roomDest = dd.DestinationRoom;
                }
                ;
            }
            if (roomDest == null)
            {
                //Cherche le dispatch vide
                lstDispatch.Filtre = new CFiltreMemoryDb(CDataDispatch.c_champStartEntityId + "=@1", "");
                if (lstDispatch.Count() > 0)
                {
                    roomDest = lstDispatch.ElementAt(0).DestinationRoom;
                }
            }
            if (roomDest != null)
            {
                m_cacheDispatch[strIdEntite] = roomDest.Id;
            }
            return(roomDest);
        }
示例#3
0
        public void CreateAlarmesOnTrap(CTrapInstance trap, CFuturocomTrace trace)
        {
            trap.CurrentTrapHandler = this;
            CDefinitionProprieteDynamiqueVariableFormule def = AssureVariableTrap(FormulePreTraitementTrap);
            CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(TypeAgent);

            if (def != null)
            {
                ctx.SetValeurVariable(def, trap);
            }
            CResultAErreur result = CResultAErreur.True;

            trap.EntiteAssociee = null;
            if (FormuleIndexEntite != null && TypeEntiteAssocie != null)
            {
                CContexteEvaluationExpression ctxSurThis = new CContexteEvaluationExpression(trap);
                result = FormuleIndexEntite.Eval(ctxSurThis);
                if (result && result.Data != null)
                {
                    CListeEntitesDeMemoryDb <CEntiteSnmpPourSupervision> lst = trap.AgentSnmp.Entites;
                    lst.Filtre = new CFiltreMemoryDb(CEntiteSnmpPourSupervision.c_champIndex + "=@1 and " +
                                                     CTypeEntiteSnmpPourSupervision.c_champId + "=@2",
                                                     result.Data.ToString(),
                                                     TypeEntiteAssocie.Id);
                    if (lst.Count() > 0)
                    {
                        trap.EntiteAssociee = lst.ElementAt(0);
                        if (trace != null)
                        {
                            trace.Write(
                                "Trap associated to entity " + trap.EntiteAssociee.Libelle + " (" + trap.EntiteAssociee.TypeEntite.Libelle + ")",
                                ALTRACE.DEBUG);
                        }
                    }
                    else
                    {
                        if (trace != null)
                        {
                            trace.Write(
                                "Associated entity is null (" + TypeEntiteAssocie.Libelle + " " + result.Data.ToString() + ")",
                                ALTRACE.DEBUG);
                        }
                    }
                }
                else
                {
                    if (trace != null)
                    {
                        if (!result)
                        {
                            trace.Write(
                                "Error in associed entity index formula : " + result.Erreur.ToString(),
                                ALTRACE.DEBUG);
                        }
                        else
                        {
                            trace.Write(
                                "Error in associed entity index formula : the formula returned a null result",
                                ALTRACE.DEBUG);
                        }
                    }
                }
            }
            bool bEvalPretraite = true;

            if (FormulePreTraitementTrap is C2iExpressionGraphique &&
                FormulePreTraitementTrap.Parametres.Count == 0)
            {
                bEvalPretraite = false;
            }
            if (bEvalPretraite)
            {
                result = FormulePreTraitementTrap.Eval(ctx);
                if (!result && trace != null)
                {
                    trace.Write(
                        "Error in Pretreatment formula " + result.Erreur.ToString(),
                        ALTRACE.DEBUG);
                }
            }



            foreach (CCreateurAlarme createur in CreateursAlarmes)
            {
                if (trace != null)
                {
                    trace.Write(
                        "Try creator " + createur.Libelle + " (" + createur.Code + ")",
                        ALTRACE.DEBUG);
                }
                bool bCreer = createur.FormuleCondition.GetType() == typeof(C2iExpressionVrai);
                if (!bCreer)
                {
                    ctx    = new CContexteEvaluationExpression(trap);
                    result = createur.FormuleCondition.Eval(ctx);
                    if (result && result.Data is bool && (bool)result.Data)
                    {
                        bCreer = true;
                    }
                    else if (trace != null)
                    {
                        if (!result)
                        {
                            trace.Write(
                                "Creator " + createur.Libelle + " condition error : " + result.Erreur.ToString(),
                                ALTRACE.DEBUG);
                        }
                        else
                        {
                            trace.Write(
                                "Create " + createur.Libelle + " condition returned false",
                                ALTRACE.DEBUG);
                        }
                    }
                }
                if (bCreer)
                {
                    if (trace != null)
                    {
                        trace.Write(
                            "Creator " + createur.Libelle + " condition returned true",
                            ALTRACE.DEBUG);
                    }
                    trap.AddAlarm(createur.Code, 0, trace);
                }
            }
        }
示例#4
0
        private int CompareAdresse(string strAdresse1, string strAdresse2, int nNiveau, bool bEgalSiVide)
        {
            CListeEntitesDeMemoryDb <CRelationSystemeCoordonnees_FormatNumerotation> lstFormats = RelationFormatsNumerotation;

            if (nNiveau >= lstFormats.Count())
            {
                return(0);
            }

            CRelationSystemeCoordonnees_FormatNumerotation relFormat = (CRelationSystemeCoordonnees_FormatNumerotation)lstFormats.ElementAt(nNiveau);

            if (strAdresse2 == "" || strAdresse1 == "")
            {
                if (bEgalSiVide)
                {
                    return(0);
                }
                else
                {
                    return(strAdresse1.CompareTo(strAdresse2));
                }
            }

            int    nPos1 = strAdresse1.IndexOf(c_separateurNumerotations);
            int    nPos2 = strAdresse2.IndexOf(c_separateurNumerotations);
            string strDebut1, strFin1;
            string strDebut2, strFin2;

            if (nPos1 > 0)
            {
                strDebut1 = strAdresse1.Substring(0, nPos1);
                strFin1   = strAdresse1.Substring(nPos1 + 1);
            }
            else
            {
                strDebut1 = strAdresse1;
                strFin1   = "";
            }
            if (nPos2 > 0)
            {
                strDebut2 = strAdresse2.Substring(0, nPos2);
                strFin2   = strAdresse2.Substring(nPos2 + 1);
            }
            else
            {
                strDebut2 = strAdresse2;
                strFin2   = "";
            }
            int nResult = relFormat.Compare(strDebut1, strDebut2);

            if (nResult != 0)
            {
                return(nResult);
            }

            return(CompareAdresse(strFin1, strFin2, nNiveau + 1, bEgalSiVide));
        }
示例#5
0
        /// <summary>
        /// Ajoute à la coordonnée nNbToAdd et retourne la nouvelle
        /// coordonnée (string dans le data), ou une erreur si ce n'est pas possible
        /// </summary>
        /// <param name="strCoordonnee"></param>
        /// <param name="nNbToAdd"></param>
        /// <returns></returns>
        public CResultAErreur AjouteDansNiveau(string strCoordonnee, int nNbToAdd)
        {
            CResultAErreur result = CResultAErreur.True;

            string[] strNiveaux = strCoordonnee.Split(c_separateurNumerotations);

            int nNiveauFinal = strNiveaux.Length - 1;

            //récupère le la système de numérotation de ce niveau
            CListeEntitesDeMemoryDb <CRelationSystemeCoordonnees_FormatNumerotation> listeNiveaux = RelationFormatsNumerotation;

            listeNiveaux.Sort = CRelationSystemeCoordonnees_FormatNumerotation.c_champPosition;
            if (nNiveauFinal > listeNiveaux.Count())
            {
                //plus de paramétrage pour ce niveau
                result.EmpileErreur(I.T("The coordinate has too many levels for the defined system|253"));
                return(result);
            }

            //Ajoute le nombre au dernier niveau
            CRelationSystemeCoordonnees_FormatNumerotation rel = (CRelationSystemeCoordonnees_FormatNumerotation)listeNiveaux.ElementAt(nNiveauFinal);

            result = rel.Ajoute(strNiveaux[strNiveaux.Length - 1], nNbToAdd);

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

            //Reconstruit la coordonnée
            string strCoord = "";

            for (int nNiveau = 0; nNiveau < nNiveauFinal; nNiveau++)
            {
                strCoord += strNiveaux[nNiveau] + c_separateurNumerotations;
            }
            strCoord   += (string)result.Data;
            result.Data = strCoord;

            return(result);
        }
示例#6
0
        /// <summary>
        /// Analyse une coordonnée donnée avec une unité pour voir si le dernier niveau<br/>
        /// de la coordonnée correspond bien avec fournie
        /// </summary>
        /// <param name="strCoordonnee">coordonnée à vérifier</param>
        /// <param name="unite">Unite</param>
        /// <returns>Retourne vrai ou faux avec des erreurs en cas de problème syntaxique ou autre sur la coordonnée</returns>
        public CResultAErreur VerifieUnite(string strCoordonnee, CUniteCoordonnee unite)
        {
            CResultAErreur result = CResultAErreur.True;

            string[] strNiveaux = strCoordonnee.Split(c_separateurNumerotations);

            int nNiveauFinal = strNiveaux.Length - 1;

            //récupère le la système de numérotation de ce niveau
            CListeEntitesDeMemoryDb <CRelationSystemeCoordonnees_FormatNumerotation> listeNiveaux = RelationFormatsNumerotation;

            listeNiveaux.Sort = CRelationSystemeCoordonnees_FormatNumerotation.c_champPosition;
            if (nNiveauFinal > listeNiveaux.Count())
            {
                //plus de paramétrage pour ce niveau
                result.EmpileErreur(I.T("The coordinate has too many levels for the defined system|253"));
                return(result);
            }
            CRelationSystemeCoordonnees_FormatNumerotation rel = (CRelationSystemeCoordonnees_FormatNumerotation)listeNiveaux.ElementAt(nNiveauFinal);

            return(rel.VerifieUnite(unite));
        }