コード例 #1
0
ファイル: DataAccessorExtentions.cs プロジェクト: NueGy/NgLib
 /// <summary>
 /// Obtenir/Convertir en Bool NULLABLE
 /// </summary>
 /// <param name="dataAccessor"></param>
 /// <param name="nameValue"></param>
 /// <param name="AccesOptions"></param>
 /// <param name="defaultvalue"></param>
 /// <returns></returns>
 public static bool?GetBoolean(this IDataAccessor dataAccessor, string nameValue, DataAccessorOptionEnum AccesOptions, bool?defaultvalue)
 {
     try
     {
         object obj = dataAccessor.GetObject(nameValue, AccesOptions);
         if (obj == DBNull.Value || obj == null)
         {
             return(null);
         }
         else if (AccesOptions.HasFlag(DataAccessorOptionEnum.AdvancedConverter))
         {
             return(ConvertPlus.ToBoolean(obj));
         }
         else
         {
             return(Convert.ToBoolean(obj));
         }
     }
     catch (Exception ex)
     {
         if (!AccesOptions.HasFlag(DataAccessorOptionEnum.Safe))
         {
             throw new DataAccessorException("GetString " + ex.Message, ex);
         }
         throw;
     }
 }
コード例 #2
0
ファイル: DataAccessorExtentions.cs プロジェクト: NueGy/NgLib
        /// <summary>
        /// Obtenir un string
        /// </summary>
        /// <param name="dataAccessor"></param>
        /// <param name="nameValue"></param>
        /// <param name="AccesOptions"></param>
        /// <returns></returns>
        public static string GetString(this IDataAccessor dataAccessor, string nameValue, DataAccessorOptionEnum AccesOptions)
        {
            try
            {
                if (AccesOptions.HasFlag(DataAccessorOptionEnum.Safe) && dataAccessor == null)
                {
                    return(null);
                }
                object obj = dataAccessor.GetObject(nameValue, AccesOptions);

                if ((obj == null || obj == DBNull.Value)) // retourne pas null par default
                {
                    if (AccesOptions.HasFlag(DataAccessorOptionEnum.Nullable))
                    {
                        return(null);
                    }
                    else
                    {
                        return(string.Empty);
                    }
                }
                return(obj.ToString());
                //DATA.MANIPULATE.TEXT.TextTreatment.Transform
                //return str;
            }
            catch (Exception ex)
            {
                if (!AccesOptions.HasFlag(DataAccessorOptionEnum.Safe))
                {
                    throw new DataAccessorException("GetString " + ex.Message, ex);
                }
                return(string.Empty);
            }
        }
コード例 #3
0
ファイル: DataAccessorExtentions.cs プロジェクト: NueGy/NgLib
 /// <summary>
 /// Obtenir/Convertir en DateTime
 /// </summary>
 /// <param name="dataAccessor"></param>
 /// <param name="nameValue"></param>
 /// <param name="DefaultValue"></param>
 /// <param name="AccesOptions"></param>
 /// <returns></returns>
 public static DateTime GetDateTime(this IDataAccessor dataAccessor, string nameValue, DateTime DefaultValue, DataAccessorOptionEnum AccesOptions = 0)
 {
     try
     {
         object obj = dataAccessor.GetObject(nameValue, AccesOptions);
         if (obj == DBNull.Value || obj == null)
         {
             return(DefaultValue);
         }
         if (obj is string && string.IsNullOrWhiteSpace((string)obj))
         {
             return(DefaultValue);
         }
         else if (AccesOptions.HasFlag(DataAccessorOptionEnum.AdvancedConverter))
         {
             return(ConvertPlus.ToDateTime(obj));
         }
         else
         {
             return(Convert.ToDateTime(obj));
         }
     }
     catch (Exception ex)
     {
         if (!AccesOptions.HasFlag(DataAccessorOptionEnum.Safe))
         {
             throw new DataAccessorException("GetString " + ex.Message, ex);
         }
         throw;
     }
 }
コード例 #4
0
        /// <summary>
        /// Obtenir une valeur, methode standard DataAccessor
        /// </summary>
        public object GetObject(string nameValue, DataAccessorOptionEnum AccesOptions)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(nameValue))
                {
                    return(null);
                }
                //int positionPartWant = GetPosition(nameValue);


                if (!this.ContainsKey(nameValue))
                {
                    return(null);
                }
                object valstring = base[nameValue];

                // if(AccesOptions.HasFlag( BASICS.DataAccessorOptionEnum.Dynamise))

                return(valstring);
            }
            catch (Exception)
            {
                if (AccesOptions.HasFlag(DataAccessorOptionEnum.Safe))
                {
                    return(null);
                }
                throw;
            }
        }
コード例 #5
0
ファイル: KeyValue.cs プロジェクト: NueGy/NgLib
 public bool SetData(object obj, DataAccessorOptionEnum AccesOptions)
 {
     if (!AccesOptions.HasFlag(DataAccessorOptionEnum.IgnoreChange))
     {
         this.isChangedValue = true;
     }
     this.Value = obj;
     return(true);
 }
コード例 #6
0
        public virtual object EncryptObjectValue(IDataAccessor dataAccessor, string nameValue, object value, DataAccessorOptionEnum options)
        {
            if (!options.HasFlag(DataAccessorOptionEnum.Encrypted) || dataAccessor == null || value == null) return value; // rien à faire
            if (this.OptionForEncrypt == null) throw new NullReferenceException($"DataAccessorEncrypt OptionForEncrypt NULL (objectType: {dataAccessor.GetType().Name})");
            if (value.GetType().IsArray) return EncryptArrayValue(dataAccessor, nameValue, value, options); // spécifique pour gérer les array

            string strvalue = value.ToString(); // la valeur en base sera forcément un string
            string encryptedVal = Nglib.FORMAT.CryptHashTools.Encrypt(strvalue, this.OptionForEncrypt);
            return encryptedVal;
        }
コード例 #7
0
        protected virtual object EncryptArrayValue(IDataAccessor dataAccessor, string nameValue, object value, DataAccessorOptionEnum options)
        {
            if (!options.HasFlag(DataAccessorOptionEnum.Encrypted) || dataAccessor == null || value == null) return value; // rien à faire
            if (this.OptionForEncrypt == null) throw new NullReferenceException($"DataAccessorEncrypt OptionForEncrypt NULL (objectType: {dataAccessor.GetType().Name})");
            string[] adata = DataAccessorTools.ConvertoArrayString(value);
            for (int i = 0; i < adata.Length; i++) // on encrypte les valeurs une par une
                adata[i] = Nglib.FORMAT.CryptHashTools.Encrypt(adata[i], this.OptionForEncrypt);

            return adata;
        }
コード例 #8
0
ファイル: DataAccessorExtentions.cs プロジェクト: NueGy/NgLib
        public static string[] GetStringArray(this IDataAccessor dataAccessor, string nameValue, DataAccessorOptionEnum AccesOptions = DataAccessorOptionEnum.None)
        {
            if (AccesOptions.HasFlag(DataAccessorOptionEnum.Safe) && dataAccessor == null)
            {
                return(null);
            }
            object obj = dataAccessor.GetObject(nameValue, AccesOptions);

            string[] retour = obj as string[];
            return(retour);
        }
コード例 #9
0
        protected virtual object DecryptArrayValue(IDataAccessor dataAccessor, string nameValue, object valuecc, DataAccessorOptionEnum options)
        {
            if (!options.HasFlag(DataAccessorOptionEnum.Encrypted) || dataAccessor == null || valuecc == null) return valuecc; // rien à faire
            if (this.OptionForDecrypt == null) throw new NullReferenceException($"DataAccessorDecrypt OptionForDecrypt NULL (objectType: {dataAccessor.GetType().Name})");
            if (valuecc == null) return null;
            string[] adata = valuecc as string[];
            if (adata == null) throw new Exception("DecryptArrayValue Only string[] input allowed");

            for (int i = 0; i < adata.Length; i++) //une par une
                adata[i] = Nglib.FORMAT.CryptHashTools.Decrypt(adata[i], this.OptionForDecrypt);
            return adata;
        }
コード例 #10
0
ファイル: DataAccessorExtentions.cs プロジェクト: NueGy/NgLib
        public static long[] GetLongArray(this IDataAccessor dataAccessor, string nameValue, DataAccessorOptionEnum AccesOptions = DataAccessorOptionEnum.None, long DefaultValue = 0)
        {
            if (AccesOptions.HasFlag(DataAccessorOptionEnum.Safe) && dataAccessor == null)
            {
                return(null);
            }
            object obj = dataAccessor.GetObject(nameValue, AccesOptions);

            long[] retour = obj as long[];
            if (retour == null && obj is string[])
            {
                retour = (obj as string[]).Select(item => (string.IsNullOrWhiteSpace(item)) ? DefaultValue : Convert.ToInt64(item)).ToArray();
            }
            return(retour);
        }
コード例 #11
0
ファイル: DataAccessorExtentions.cs プロジェクト: NueGy/NgLib
        public static DateTime[] GetDateTimeArray(this IDataAccessor dataAccessor, string nameValue, DataAccessorOptionEnum AccesOptions = DataAccessorOptionEnum.None)
        {
            if (AccesOptions.HasFlag(DataAccessorOptionEnum.Safe) && dataAccessor == null)
            {
                return(null);
            }
            object obj = dataAccessor.GetObject(nameValue, AccesOptions);

            DateTime[] retour = obj as DateTime[];
            if (retour == null && obj is string[])
            {
                retour = (obj as string[]).Select(item => (string.IsNullOrWhiteSpace(item)) ? new DateTime() : Convert.ToDateTime(item)).ToArray();
            }
            return(retour);
        }
コード例 #12
0
ファイル: DataAccessorExtentions.cs プロジェクト: NueGy/NgLib
        public static bool[] GetBooleanArray(this IDataAccessor dataAccessor, string nameValue, DataAccessorOptionEnum AccesOptions = DataAccessorOptionEnum.None, bool defaultvalue = false)
        {
            if (AccesOptions.HasFlag(DataAccessorOptionEnum.Safe) && dataAccessor == null)
            {
                return(null);
            }
            object obj = dataAccessor.GetObject(nameValue, AccesOptions);

            bool[] retour = obj as bool[];
            if (retour == null && obj is string[])
            {
                retour = (obj as string[]).Select(item => (string.IsNullOrWhiteSpace(item)) ? defaultvalue : Convert.ToBoolean(item)).ToArray();
            }
            return(retour);
        }
コード例 #13
0
ファイル: DataAccessorExtentions.cs プロジェクト: NueGy/NgLib
        /// <summary>
        /// Définir une donnée
        /// </summary>
        public static bool SetObject(this IDataAccessor dataAccessor, string nameValue, object obj, DataAccessorOptionEnum AccesOptions)
        {
            object adata = obj;

            // Cryptage
            if (obj != null && AccesOptions.HasFlag(DataAccessorOptionEnum.Encrypted))
            {
                var cryptoctx = dataAccessor.GetCryptoContext();
                if (cryptoctx != null)
                {
                    adata = cryptoctx.EncryptObjectValue(dataAccessor, nameValue, adata, AccesOptions);
                }
            }
            if (adata == null)
            {
                adata = DBNull.Value;                // les nul son interdit en base
            }
            return(dataAccessor.SetData(nameValue, adata, AccesOptions));
        }
コード例 #14
0
ファイル: DataAccessorExtentions.cs プロジェクト: NueGy/NgLib
        /// <summary>
        /// Obtenir la données
        /// </summary>
        public static object GetObject(this IDataAccessor dataAccessor, string nameValue, DataAccessorOptionEnum AccesOptions)
        {
            //Obtenir la données la donnée
            object adata = dataAccessor.GetData(nameValue, AccesOptions);

            //Cryptage
            if (adata != null && AccesOptions.HasFlag(DataAccessorOptionEnum.Encrypted))
            {
                var cryptoctx = dataAccessor.GetCryptoContext();
                if (cryptoctx != null)
                {
                    adata = cryptoctx.DecryptObjectValue(dataAccessor, nameValue, adata, AccesOptions);
                }
            }



            return(adata);
        }
コード例 #15
0
ファイル: DataAccessorExtentions.cs プロジェクト: NueGy/NgLib
        public static TEnum?GetEnum <TEnum>(this IDataAccessor dataAccessor, string fieldname, TEnum?defaultValue, DataAccessorOptionEnum AccesOptions = 0) where TEnum : struct
        {
            TEnum? foo = defaultValue;
            Object obj = dataAccessor.GetObject(fieldname, AccesOptions);

            try
            {
                if (obj == null || obj == DBNull.Value || obj is System.DBNull)
                {
                    foo = defaultValue;
                }
                else if (obj is string)
                {
                    string objTypeIn = obj.ToString();
                    if (!string.IsNullOrWhiteSpace(objTypeIn))
                    {
                        foo = (TEnum)Enum.Parse(typeof(TEnum), objTypeIn);
                        if (!Enum.IsDefined(typeof(TEnum), foo) && !foo.ToString().Contains(","))
                        {
                            throw new InvalidOperationException(string.Format("{0} is not an underlying value of the YourEnum enumeration.", objTypeIn));
                        }
                    }
                }
                else if (obj is int || obj is short)
                {
                    foo = (TEnum)obj;
                }
                else
                {
                    throw new NotImplementedException(string.Format("Type {0} non géré", obj.GetType().ToString()));
                }
            }
            catch (Exception ex)
            {
                if (!AccesOptions.HasFlag(DataAccessorOptionEnum.Safe))
                {
                    throw new Exception("GetEnum " + ex.Message, ex);
                }
            }
            return(foo);
        }
コード例 #16
0
ファイル: DataAccessorExtentions.cs プロジェクト: NueGy/NgLib
 public static string DynamicValues(this IDataAccessor dataAccessor, string formatingValues, Dictionary <string, string> transformFuctions = null, DataAccessorOptionEnum AccesOptions = DataAccessorOptionEnum.None)
 {
     try
     {
         // dynamisation de la chaine de caratère
         string retour = FORMAT.StringTransform.DynamiseWithAccessor(formatingValues, dataAccessor);
         // Transformation de la chaine finale selon une série d'instruction de transformation
         if (transformFuctions != null)
         {
             retour = FORMAT.StringTransform.Transform(retour, transformFuctions);
         }
         return(retour);
     }
     catch (Exception ex)
     {
         if (!AccesOptions.HasFlag(DataAccessorOptionEnum.Safe))
         {
             throw new DataAccessorException("FormatingMultiValues " + ex.Message, ex);
         }
         return(string.Empty);
     }
 }
コード例 #17
0
ファイル: DataAccessorExtentions.cs プロジェクト: NueGy/NgLib
 public static void FromDictionaryValues(this IDataAccessor dataAccessor, Dictionary <string, object> Values, DataAccessorOptionEnum AccesOptions = 0)
 {
     try
     {
         DataAccessorOptionEnum options = DataAccessorOptionEnum.None;
         foreach (string itemkey in Values.Keys)
         {
             dataAccessor.SetObject(itemkey, Values[itemkey], options);
         }
     }
     catch (Exception)
     {
         if (AccesOptions.HasFlag(DataAccessorOptionEnum.Safe))
         {
             return;
         }
         else
         {
             throw;
         }
     }
 }
コード例 #18
0
ファイル: DataAccessorExtentions.cs プロジェクト: NueGy/NgLib
 /// <summary>
 /// Obtenir/Convertir en Double NULLABLE
 /// </summary>
 /// <param name="dataAccessor"></param>
 /// <param name="nameValue"></param>
 /// <param name="AccesOptions"></param>
 /// <param name="defaultvalue"></param>
 /// <returns></returns>
 public static double?GetDouble(this IDataAccessor dataAccessor, string nameValue, DataAccessorOptionEnum AccesOptions, double?defaultvalue)
 {
     try
     {
         object obj = dataAccessor.GetObject(nameValue, AccesOptions);
         if (obj == DBNull.Value || obj == null)
         {
             return(null);
         }
         else
         {
             return(Convert.ToDouble(obj));
         }
     }
     catch (Exception ex)
     {
         if (!AccesOptions.HasFlag(DataAccessorOptionEnum.Safe))
         {
             throw new DataAccessorException("GetString " + ex.Message, ex);
         }
         throw;
     }
 }
コード例 #19
0
ファイル: DataPO.cs プロジェクト: NueGy/NgLib
        /// <summary>
        /// Défini un objet
        /// </summary>
        /// <returns></returns>
        public bool SetData(string nameValue, object obj, DataAccessorOptionEnum AccesOptions)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(nameValue))
                {
                    return(false);
                }
                nameValue = nameValue.Trim();


                if (nameValue.Contains(":"))
                { // Obtenir la valeur dans un datapo join à celui-ci
                    throw new Exception("DataPo In SubObject non géré");
                }
                else if (nameValue.StartsWith("/"))
                {                                                    // Obtenir la valeur dans le flux nosql lié
                    string      fieldName = nameValue.Split('/')[1]; // le nom du champ est équivalent au nom du root
                    IDataPOFlow flow      = this.GetFlow(fieldName);
                    if (flow == null)
                    {
                        return(false);
                    }
                    //bool iset = flow.SetObject(nameValue, obj, AccesOptions);
                    //if (iset) this.localRow.SetModified();
                    //return iset;
                    //!!!!!!!!!!!!
                    return(false);
                }
                else
                { // Obtien la valeur normalement dans le datarow local
                    if (this.localRow == null)
                    {
                        this.DefineSchemaPO();                        // si pas de datarow, on l'initialiser (identique à GetRow())
                    }
                    System.Data.DataColumn realColumn = this.localRow.Table.Columns[nameValue];
                    if (realColumn == null)
                    {
                        if (AccesOptions.HasFlag(DataAccessorOptionEnum.NotCreateColumn)) // création de la colonne interdite
                        {
                            if (AccesOptions.HasFlag(DataAccessorOptionEnum.Safe))
                            {
                                return(false);
                            }
                            else
                            {
                                throw new Exception("Colonne Introuvable dans le DataRow (NotCreateColumn = true)");
                            }
                        }
                        else if (obj == null || obj == DBNull.Value) // si la valeur est null et que la valeur existe pas c'est pas la peine de créer une colone
                        {
                            return(false);
                            //if (AccesOptions.HasFlag(DataAccessorOptionEnum.Safe)) return false;
                            //else throw new Exception("Colonne Introuvable dans le DataRow (Impossible de déterminer le type à partir d'un null pour créer la colonne)");
                        }
                        // Création de la colone
                        Type typetocreate = obj.GetType();
                        realColumn = this.localRow.Table.CreateColumn(nameValue.ToLower(), typetocreate);  // Création d'une nouvelle colonne dans la table pour stoker la valeur (toujours en minuscule)
                    }


                    object orgnobj = this.localRow[realColumn];

                    if (obj == null && orgnobj == null)
                    {
                        return(false);                               // inutile si pas modifié
                    }
                    if (obj != null && obj.Equals(orgnobj))
                    {
                        return(false);                                                                         // inutile si pas modifié
                    }
                    if (AccesOptions.HasFlag(DataAccessorOptionEnum.IgnoreChange))                             // il faut tromper le datarow pour lui faire croire que la donnée n'a pas été modifié
                    {
                        Dictionary <string, object> prechanged = DataSetTools.GetChangedValues(this.localRow); // on obtien les changements précédents
                        if (prechanged.Count > 0)
                        {
                            this.localRow.RejectChanges(); // on les rejetents pour les remettre après
                        }
                        this.localRow[realColumn] = obj;   // on met à jours la données
                        this.localRow.AcceptChanges();     // on approuve la mise à jours
                        if (prechanged.Count > 0)
                        {
                            prechanged.Keys.ToList().ForEach(k => this.localRow[k] = prechanged[k]);                       // on remet les anciennes modifications
                        }
                    }
                    else
                    {
                        this.localRow[realColumn] = obj; // on met à jours la données dans le datarow , l'objet passera au statut modified
                    }
                    return(true);
                }
            }
            catch (Exception ex)
            {
                if (AccesOptions.HasFlag(DataAccessorOptionEnum.Safe))
                {
                    return(false);
                }
                else
                {
                    throw new Exception("SetObject DataRow " + nameValue + " : " + ex.Message, ex);
                }
            }
            finally
            {
            }
        }