예제 #1
0
        //----------------------------------------------------
        public int Compare(IElementDeGantt elt1, IElementDeGantt elt2)
        {
            int nResult = 0;

            if (m_propriete == null)
            {
                if (elt1 != null && elt2 != null)
                {
                    nResult = elt1.IndexTri.CompareTo(elt2.IndexTri);
                }
                if (nResult == 0)
                {
                    nResult = elt1.DateDebut.CompareTo(elt2.DateDebut);
                }
            }
            else
            {
                if (!m_bOptimiseurSet)
                {
                    m_optimiseur     = CInterpreteurProprieteDynamique.GetOptimiseur(elt1.GetType(), m_propriete.NomPropriete);
                    m_bOptimiseurSet = true;
                }
                try
                {
                    object val1 = null;
                    object val2 = null;
                    if (m_optimiseur != null)
                    {
                        val1 = m_optimiseur.GetValue(elt1);
                        val2 = m_optimiseur.GetValue(elt2);
                    }
                    else
                    {
                        val1 = CInterpreteurProprieteDynamique.GetValue(elt1, m_propriete);
                        val2 = CInterpreteurProprieteDynamique.GetValue(elt2, m_propriete);
                    }
                    if (val1 == val2)
                    {
                        if (m_parametreSuivant != null)
                        {
                            return(m_parametreSuivant.Compare(elt1, elt2));
                        }
                        return(0);
                    }
                    nResult = 0;
                    if (val1 is IComparable)
                    {
                        nResult = ((IComparable)val1).CompareTo(val2);
                    }
                }
                catch { }
            }
            if (m_bDecroissant)
            {
                nResult = -nResult;
            }
            return(nResult);
        }
 public Type GetTypeRetourne()
 {
     if (m_listeOptimiseurs.Count() > 0)
     {
         IOptimiseurGetValueDynamic optimiseur = m_listeOptimiseurs[m_listeOptimiseurs.Count() - 1];
         if (optimiseur != null)
         {
             return(optimiseur.GetTypeRetourne());
         }
     }
     return(null);
 }
예제 #3
0
        //----------------------------------------------------------
        /// <summary>
        /// Le data du result contient la valeur de la propriété pour l'objet
        /// </summary>
        /// <param name="objet"></param>
        /// <param name="strPropriete"></param>
        /// <returns></returns>
        public static IOptimiseurGetValueDynamic GetOptimiseur(Type tp, string strProprieteComplete)
        {
            COptimiseurGetValueDynamicMultiple optimiseur = new COptimiseurGetValueDynamicMultiple();
            string strSuitePropriete = "";

            do
            {
                strSuitePropriete = "";
                string[] strProprietes = strProprieteComplete.Split('.');
                string   strPropriete  = strProprietes[0];
                if (strProprieteComplete.Length > strPropriete.Length)
                {
                    strSuitePropriete = strProprieteComplete.Substring(strPropriete.Length + 1);
                }
                string strCleType          = "";
                string strProprieteSansCle = "";

                if (CDefinitionMethodeDynamique.DecomposeNomProprieteUnique(strPropriete, ref strCleType, ref strProprieteSansCle))
                {
                    strPropriete = strProprieteSansCle;
                    Type tpInterpreteur = null;
                    if (m_tableCleTypeToTypeInterpreteur.TryGetValue(strCleType.ToUpper(), out tpInterpreteur))
                    {
                        IInterpreteurProprieteDynamique interpreteur = Activator.CreateInstance(tpInterpreteur) as IInterpreteurProprieteDynamique;
                        if (interpreteur != null)
                        {
                            IOptimiseurGetValueDynamic sousOptim = interpreteur.GetOptimiseur(tp, strPropriete);
                            if (sousOptim == null)
                            {
                                return(null);
                            }
                            optimiseur.AddOptimiseur(sousOptim);
                            tp = optimiseur.GetTypeRetourne();
                        }
                    }
                    else
                    {
                        return(null);
                    }
                    strProprieteComplete = strSuitePropriete;
                }
                else
                {
                    return(null);
                }
            }while (strSuitePropriete.Length > 0);

            return(optimiseur);
        }
        /// /////////////////////////////////////////////////////////
        protected object GetValeurChamp(object source, CDefinitionProprieteDynamique propriete)
        {
            CDefinitionProprieteDynamiqueVariableFormule defFormule = propriete as CDefinitionProprieteDynamiqueVariableFormule;

            if (defFormule != null)
            {
                return(GetValeurVariable(defFormule));
            }
            if (source != null && m_bUseOptimiseurs)
            {
                Type   tp     = source.GetType();
                string strKey = tp.ToString() + "/" + propriete.NomPropriete;
                IOptimiseurGetValueDynamic optimiseur = null;
                bool bDejaCherche = false;
                if (m_dicOptimiseurs.TryGetValue(strKey, out optimiseur))
                {
                    bDejaCherche = true;
                }
                if (!bDejaCherche)
                {
                    optimiseur = CInterpreteurProprieteDynamique.GetOptimiseur(tp, propriete.NomPropriete);
                    m_dicOptimiseurs[strKey] = optimiseur;
                }
                if (optimiseur != null)
                {
                    return(optimiseur.GetValue(source));
                }
            }
            CResultAErreur result = CInterpreteurProprieteDynamique.GetValue(source, propriete, m_cache);

            if (result)
            {
                return(result.Data);
            }
            if (m_oldInterpreteur != null)
            {
                return(m_oldInterpreteur.GetValue(source, propriete));
            }
            return(null);
        }
예제 #5
0
        public override object GetValeur(object obj, CCacheValeursProprietes cacheValeurs, CRestrictionUtilisateurSurType restriction)
        {
            IApplatisseurProprietes applatisseur = obj as IApplatisseurProprietes;

            if (applatisseur != null)
            {
                obj = applatisseur.GetObjetParDefaut();
            }
            if (m_strCleRestriction == "")
            {
                if (m_champOrigine is CDefinitionProprieteDynamiqueChampCustom)
                {
                    CDbKey       keyChamp = ((CDefinitionProprieteDynamiqueChampCustom)m_champOrigine).DbKeyChamp;
                    CChampCustom champ    = new CChampCustom(CContexteDonneeSysteme.GetInstance());
                    if (champ.ReadIfExists(keyChamp))
                    {
                        m_strCleRestriction = champ.CleRestriction;
                    }
                }
                else if (m_champOrigine != null)
                {
                    m_strCleRestriction = m_champOrigine.NomProprieteSansCleTypeChamp;
                }
            }

            if (restriction != null && m_strCleRestriction != "" && (restriction.GetRestriction(m_strCleRestriction) & ERestriction.Hide) == ERestriction.Hide)
            {
                return(null);
            }

            if (!m_bOptimFaite && obj != null)
            {
                m_bOptimFaite = true;
                if (obj is CObjetDonnee)
                {
                    m_strChampOrigineOptim = "";
                    PropertyInfo info = obj.GetType().GetProperty(m_champOrigine.NomProprieteSansCleTypeChamp);

                    //Il faut absolument stocker le type, car si
                    //Le champ vient d'une interface, tous les éléments ne sont pas forcement
                    //du même type, et ne proviennent pas forcement du même champ
                    m_typeOptim = obj.GetType();

                    if (info != null)
                    {
                        object[] attribs = info.GetCustomAttributes(typeof(AccesDirectInterditAttribute), true);
                        if (attribs.Length == 0)
                        {
                            attribs = info.GetCustomAttributes(typeof(TableFieldPropertyAttribute), true);
                            if (attribs != null && attribs.Length > 0)
                            {
                                m_strChampOrigineOptim = ((TableFieldPropertyAttribute)attribs[0]).NomChamp;
                            }
                        }
                    }
                }
                if (m_strChampOrigineOptim == "")
                {
                    m_optimiseur = CInterpreteurProprieteDynamique.GetOptimiseur(obj.GetType(), m_champOrigine.NomPropriete);
                }
            }
            if (m_strChampOrigineOptim != "" && obj is CObjetDonnee && obj.GetType() == m_typeOptim)
            {
                return(((CObjetDonnee)obj).Row[m_strChampOrigineOptim]);
            }
            else if (m_optimiseur != null)
            {
                return(m_optimiseur.GetValue(obj));
            }
            else
            {
                return(CInterpreteurProprieteDynamique.GetValue(obj, ChampOrigine, cacheValeurs).Data);
            }
        }
 public void AddOptimiseur(IOptimiseurGetValueDynamic optimiseur)
 {
     m_listeOptimiseurs.Add(optimiseur);
 }