//---------------------------------------------------- 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); }
//---------------------------------------------------------- /// <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); }
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); }