コード例 #1
0
ファイル: SqlStore.cs プロジェクト: JabX/kinetix
        /// <summary>
        /// Ajoute une règle de gestion au store.
        /// </summary>
        /// <param name="rule">Règle de gestion.</param>
        public void AddRule(IStoreRule rule)
        {
            if (rule == null)
            {
                throw new ArgumentNullException("rule");
            }

            _rules.Add(rule.FieldName, rule);
        }
コード例 #2
0
ファイル: BrokerManager.cs プロジェクト: JabX/kinetix
        /// <summary>
        /// Ajoute une règle appliquée conditionnellement par les brokers.
        /// </summary>
        /// <param name="predicate">Prédicat d'application à l'objet géré par le broker.</param>
        /// <param name="rule">Règle à appliquer si le prédicat est vrai.</param>
        public void AddRule(Func <object, bool> predicate, IStoreRule rule)
        {
            if (!_typedRules.ContainsKey(predicate))
            {
                _typedRules[predicate] = new HashSet <IStoreRule>();
            }

            _typedRules[predicate].Add(rule);
        }
コード例 #3
0
ファイル: SqlStore.cs プロジェクト: JabX/kinetix
        /// <summary>
        /// Ajoute les paramètres d'insertion.
        /// </summary>
        /// <param name="bean">Bean à insérér.</param>
        /// <param name="beanDefinition">Définition du bean.</param>
        /// <param name="parameters">Paramètres de la commande SQL.</param>
        /// <param name="columnSelector">Selecteur de colonnes à mettre à jour ou à ignorer.</param>
        protected void AddInsertParameters(T bean, BeanDefinition beanDefinition, SqlServerParameterCollection parameters, ColumnSelector columnSelector)
        {
            if (beanDefinition == null)
            {
                throw new ArgumentNullException("beanDefinition");
            }

            foreach (BeanPropertyDescriptor property in beanDefinition.Properties)
            {
                if (property.IsPrimaryKey || property.MemberName == null || (columnSelector != null && !columnSelector.ColumnList.Contains(property.MemberName)))
                {
                    continue;
                }

                object value = property.GetValue(bean);
                if (value != null)
                {
                    ExtendedValue extValue = value as ExtendedValue;
                    if (extValue != null)
                    {
                        value = extValue.Value;
                    }
                }

                IStoreRule rule      = this.GetStoreRule(property.PropertyName);
                ValueRule  valueRule = null;
                if (rule != null)
                {
                    valueRule = rule.GetInsertValue(value);
                }

                if (valueRule != null)
                {
                    switch (valueRule.Action)
                    {
                    case ActionRule.DoNothing:
                        continue;

                    case ActionRule.Update:
                        value = valueRule.Value;
                        break;

                    default:
                        throw new NotSupportedException();
                    }
                }

                // Ajout du paramètre en entrée de la commande.
                SqlServerParameter parameter = AddParameter(parameters, property, value);
                if (property.PrimitiveType == typeof(byte[]))
                {
                    parameter.DbType = DbType.Binary;
                }
            }
        }
コード例 #4
0
ファイル: BrokerManager.cs プロジェクト: JabX/kinetix
        /// <summary>
        /// Ajoute une règle appliquée par les brokers.
        /// </summary>
        /// <param name="rule">IStoreRule.</param>
        public void AddRule(IStoreRule rule)
        {
            if (rule == null)
            {
                throw new ArgumentNullException("rule");
            }

            if (!_storeRules.Contains(rule))
            {
                _storeRules.Add(rule);
            }
        }
コード例 #5
0
        /// <summary>
        /// Crée la requête SQL d'insertion.
        /// </summary>
        /// <param name="beanDefinition">Définition du bean.</param>
        /// <param name="dbGeneratedPK">True si la clef est générée par la base.</param>
        /// <param name="columnSelector">Selecteur de colonnes à mettre à jour ou à ignorer.</param>
        /// <returns>Requête SQL.</returns>
        private string BuildInsertQuery(BeanDefinition beanDefinition, bool dbGeneratedPK, ColumnSelector columnSelector)
        {
            StringBuilder sbInsert = new StringBuilder(CurrentUserStatementLog);

            sbInsert.Append("insert into ");
            sbInsert.Append(beanDefinition.ContractName).Append("(");
            StringBuilder sbValues = new StringBuilder(") values (");
            int           count    = 0;

            foreach (BeanPropertyDescriptor property in beanDefinition.Properties)
            {
                if (dbGeneratedPK && (property.IsPrimaryKey || property.MemberName == null ||
                                      (columnSelector != null && !columnSelector.ColumnList.Contains(property.MemberName))))
                {
                    continue;
                }

                IStoreRule rule = this.GetStoreRule(property.PropertyName);
                if (rule != null)
                {
                    ValueRule valueRule = rule.GetInsertValue(null);
                    if (valueRule != null && valueRule.Action == ActionRule.DoNothing)
                    {
                        continue;
                    }
                }

                if (count > 0)
                {
                    sbInsert.Append(", ");
                    sbValues.Append(", ");
                }

                sbInsert.Append(property.MemberName);

                sbValues.Append(VariablePrefix);
                sbValues.Append(property.MemberName);
                count++;
            }

            sbInsert.Append(sbValues.ToString()).Append(")\n");
            if (dbGeneratedPK)
            {
                sbInsert.Append("select cast(SCOPE_IDENTITY() as int)");
            }

            return(sbInsert.ToString());
        }
コード例 #6
0
ファイル: SqlStore.cs プロジェクト: JabX/kinetix
        /// <summary>
        /// Crée la chaîne liée à la clause Where.
        /// </summary>
        /// <param name="bean">Bean à mettre à jour.</param>
        /// <param name="sbUpdateWhere">Clause Where.</param>
        /// <param name="property">Propriété courante.</param>
        /// <param name="rule">Règle à appliquer.</param>
        protected void BuildUpdateWhere(T bean, StringBuilder sbUpdateWhere, BeanPropertyDescriptor property, IStoreRule rule)
        {
            if (sbUpdateWhere == null)
            {
                throw new ArgumentNullException("sbUpdateWhere");
            }

            if (property == null)
            {
                throw new ArgumentNullException("property");
            }

            if (rule == null)
            {
                return;
            }

            object value = property.GetValue(bean);

            if (value != null)
            {
                ExtendedValue extValue = value as ExtendedValue;
                if (extValue != null)
                {
                    value = extValue.Value;
                }
            }

            ValueRule valueRule = rule.GetWhereClause(value);

            if (valueRule == null)
            {
                return;
            }

            switch (valueRule.Action)
            {
            case ActionRule.Check:
                sbUpdateWhere.Append(" and ").Append(property.MemberName).Append(" = ");
                sbUpdateWhere.Append(VariablePrefix).Append("RU_").Append(
                    property.MemberName);
                break;

            case ActionRule.DoNothing:
                break;

            default:
                throw new NotSupportedException();
            }
        }
コード例 #7
0
ファイル: SqlStore.cs プロジェクト: JabX/kinetix
        /// <summary>
        /// Crée la requête SQL de mise à jour d'un bean.
        /// </summary>
        /// <param name="bean">Bean à mettre à jour.</param>
        /// <param name="beanDefinition">Définition du bean.</param>
        /// <param name="primaryKey">Définition de la clef primaire.</param>
        /// <param name="columnSelector">Selecteur de colonnes à mettre à jour ou à ignorer.</param>
        /// <returns>Requête SQL.</returns>
        protected string BuildUpdateQuery(T bean, BeanDefinition beanDefinition, BeanPropertyDescriptor primaryKey, ColumnSelector columnSelector)
        {
            if (beanDefinition == null)
            {
                throw new ArgumentNullException("beanDefinition");
            }

            if (primaryKey == null)
            {
                throw new ArgumentNullException("primaryKey");
            }

            StringBuilder sbUpdate = new StringBuilder(CurrentUserStatementLog);

            sbUpdate.Append("update ");

            StringBuilder sbUpdateSet = new StringBuilder(beanDefinition.ContractName);

            sbUpdateSet.Append(" set");

            StringBuilder sbUpdateWhere = new StringBuilder(" where ");

            sbUpdateWhere.Append(primaryKey.MemberName).Append(" = ").Append(VariablePrefix).Append(primaryKey.MemberName);

            // Construction des champs de l'update SET et du WHERE
            int count = 0;

            foreach (BeanPropertyDescriptor property in beanDefinition.Properties)
            {
                // Si la propriété est une clé primaire ou n'est pas défini,
                // on passe à la propriété suivante.
                if (property.MemberName == null || property.IsPrimaryKey || property.IsReadOnly ||
                    (columnSelector != null && !columnSelector.ColumnList.Contains(property.MemberName)))
                {
                    continue;
                }

                // Dans le cas où la règle appliquée au champ n'a pas pour action
                // DoNothing, le champ est ajouté dans la liste pour être mis à jour.
                IStoreRule rule      = this.GetStoreRule(property.PropertyName);
                ValueRule  valueRule = null;
                if (rule != null)
                {
                    object value = property.GetValue(bean);
                    if (value != null)
                    {
                        ExtendedValue extValue = value as ExtendedValue;
                        if (extValue != null)
                        {
                            value = extValue.Value;
                        }
                    }

                    valueRule = rule.GetUpdateValue(value);
                    if (valueRule != null && ActionRule.DoNothing.Equals(valueRule.Action))
                    {
                        continue;
                    }
                }

                BuildUpdateSet(sbUpdateSet, count, property, valueRule);

                // Contrainte de la valeur à mettre à jour
                BuildUpdateWhere(bean, sbUpdateWhere, property, rule);

                count++;
            }

            sbUpdate.Append(sbUpdateSet).Append(sbUpdateWhere);
            return(sbUpdate.ToString());
        }
コード例 #8
0
ファイル: SqlStore.cs プロジェクト: JabX/kinetix
        /// <summary>
        /// Ajoute les paramètres à une commande de mise à jour.
        /// </summary>
        /// <param name="bean">Bean à mettre à jour.</param>
        /// <param name="beanDefinition">Définition du bean.</param>
        /// <param name="parameters">Paramètres de la commande SQL.</param>
        /// <param name="columnSelector">Selecteur de colonnes à mettre à jour ou à ignorer.</param>
        protected void AddUpdateParameters(T bean, BeanDefinition beanDefinition, SqlServerParameterCollection parameters, ColumnSelector columnSelector)
        {
            if (beanDefinition == null)
            {
                throw new ArgumentNullException("beanDefinition");
            }

            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            foreach (BeanPropertyDescriptor property in beanDefinition.Properties)
            {
                if (property.MemberName == null || (columnSelector != null && !columnSelector.ColumnList.Contains(property.MemberName) && !property.IsPrimaryKey))
                {
                    continue;
                }

                object value = property.GetValue(bean);
                if (value != null)
                {
                    ExtendedValue extValue = value as ExtendedValue;
                    if (extValue != null)
                    {
                        value = extValue.Value;
                    }
                }

                if (property.IsPrimaryKey)
                {
                    AddPrimaryKeyParameter(parameters, property.MemberName, value);
                }

                IStoreRule rule      = this.GetStoreRule(property.PropertyName);
                ValueRule  valueRule = null;
                if (rule != null)
                {
                    valueRule = rule.GetUpdateValue(value);
                    if (valueRule != null && valueRule.Action == ActionRule.DoNothing)
                    {
                        continue;
                    }
                }

                if (valueRule == null)
                {
                    // Ajout du paramètre en entrée de la commande envoyée à SQL Server.
                    SqlServerParameter parameter = AddParameter(parameters, property, value);
                    if (property.PrimitiveType == typeof(byte[]))
                    {
                        parameter.DbType = DbType.Binary;
                    }
                }
                else
                {
                    parameters.AddWithValue(property.MemberName, valueRule.Value);
                }

                // Contrainte de la valeur à mettre à jour
                if (rule != null)
                {
                    valueRule = rule.GetWhereClause(value);
                    if (valueRule != null && valueRule.Action != ActionRule.DoNothing)
                    {
                        parameters.AddWithValue("RU_" + property.MemberName, valueRule.Value);
                    }
                }
            }
        }
コード例 #9
0
ファイル: StandardBroker.cs プロジェクト: JabX/kinetix
 /// <summary>
 /// Ajoute une règle de gestion au store.
 /// </summary>
 /// <param name="rule">Règle de gestion.</param>
 public void AddRule(IStoreRule rule)
 {
     _store.AddRule(rule);
 }
コード例 #10
0
ファイル: TestStore.cs プロジェクト: JabX/kinetix
 /// <summary>
 /// Ajoute une règle de gestion au store.
 /// </summary>
 /// <param name="rule">Règle de gestion.</param>
 public void AddRule(IStoreRule rule)
 {
     _rules.Add(rule);
 }