コード例 #1
0
        public virtual bool AddField(Net.Vpc.Upa.Field f)
        {
            if (inUseFields.Contains(f))
            {
                return(false);
            }
            Net.Vpc.Upa.Formula formula = onPersist ? f.GetPersistFormula() : f.GetUpdateFormula();
            Net.Vpc.Upa.Impl.Persistence.ValidationPass pass = null;
            int formulaPassInteger = onPersist ? f.GetPersistFormulaOrder() : f.GetUpdateFormulaOrder();

            // passIndexes.add(formulaPassInteger);
            Net.Vpc.Upa.Impl.Persistence.ValidationPass[] passArray = Net.Vpc.Upa.Impl.FwkConvertUtils.GetMapValue <int?, Net.Vpc.Upa.Impl.Persistence.ValidationPass[]>(orderedPasses, formulaPassInteger);
            if (passArray == null)
            {
                orderedPasses[formulaPassInteger] = passArray = new Net.Vpc.Upa.Impl.Persistence.ValidationPass[((Net.Vpc.Upa.Impl.Persistence.ValidationPassType[])System.Enum.GetValues(typeof(Net.Vpc.Upa.Impl.Persistence.ValidationPassType))).Length];
            }
            int pass1 = formulaPassInteger;

            if (formula is Net.Vpc.Upa.CustomUpdaterFormula)
            {
                pass = passArray[((int)Net.Vpc.Upa.Impl.Persistence.ValidationPassType.MANUAL_VALIDATION)];
                if (pass == null)
                {
                    pass = passArray[((int)Net.Vpc.Upa.Impl.Persistence.ValidationPassType.MANUAL_VALIDATION)] = new Net.Vpc.Upa.Impl.Persistence.ValidationPass(pass1, Net.Vpc.Upa.Impl.Persistence.ValidationPassType.MANUAL_VALIDATION);
                    size++;
                }
            }
            else if (formula is Net.Vpc.Upa.CustomFormula)
            {
                pass = passArray[((int)Net.Vpc.Upa.Impl.Persistence.ValidationPassType.CUSTOM_VALIDATION)];
                if (pass == null)
                {
                    pass = passArray[((int)Net.Vpc.Upa.Impl.Persistence.ValidationPassType.CUSTOM_VALIDATION)] = new Net.Vpc.Upa.Impl.Persistence.ValidationPass(pass1, Net.Vpc.Upa.Impl.Persistence.ValidationPassType.CUSTOM_VALIDATION);
                    size++;
                }
            }
            else if (!entityOperationManager.GetPersistenceStore().IsComplexSelectSupported())
            {
                Net.Vpc.Upa.Expressions.Expression fe = GetFieldExpression(f, onPersist);
                Net.Vpc.Upa.Impl.Uql.Compiledexpression.DefaultCompiledExpression ce = (Net.Vpc.Upa.Impl.Uql.Compiledexpression.DefaultCompiledExpression)entity.Compile(fe);
                bool found = ce.FindFirstExpression <T>(Net.Vpc.Upa.Impl.Uql.Compiledfilters.CompiledExpressionHelper.QUERY_STATEMENT_FILTER) != default(T);
                if (found)
                {
                    pass = passArray[((int)Net.Vpc.Upa.Impl.Persistence.ValidationPassType.ITERATIVE_VALIDATION)];
                    if (pass == null)
                    {
                        pass = passArray[((int)Net.Vpc.Upa.Impl.Persistence.ValidationPassType.ITERATIVE_VALIDATION)] = new Net.Vpc.Upa.Impl.Persistence.ValidationPass(pass1, Net.Vpc.Upa.Impl.Persistence.ValidationPassType.ITERATIVE_VALIDATION);
                        size++;
                    }
                }
                else
                {
                    pass = passArray[((int)Net.Vpc.Upa.Impl.Persistence.ValidationPassType.DEFAULT_VALIDATION)];
                    if (pass == null)
                    {
                        pass = passArray[((int)Net.Vpc.Upa.Impl.Persistence.ValidationPassType.DEFAULT_VALIDATION)] = new Net.Vpc.Upa.Impl.Persistence.ValidationPass(pass1, Net.Vpc.Upa.Impl.Persistence.ValidationPassType.DEFAULT_VALIDATION);
                        size++;
                    }
                }
            }
            else
            {
                pass = passArray[((int)Net.Vpc.Upa.Impl.Persistence.ValidationPassType.DEFAULT_VALIDATION)];
                if (pass == null)
                {
                    pass = passArray[((int)Net.Vpc.Upa.Impl.Persistence.ValidationPassType.DEFAULT_VALIDATION)] = new Net.Vpc.Upa.Impl.Persistence.ValidationPass(pass1, Net.Vpc.Upa.Impl.Persistence.ValidationPassType.DEFAULT_VALIDATION);
                    size++;
                }
            }
            pass.GetFields().Add(f);
            inUseFields.Add(f);
            System.Collections.Generic.ICollection <Net.Vpc.Upa.PrimitiveField> dependency = (System.Collections.Generic.ICollection <Net.Vpc.Upa.PrimitiveField>)f.GetProperties().GetObject <T>(onPersist ? Net.Vpc.Upa.Impl.DefaultEntity.PERSIST_DEPENDENT_FIELDS : Net.Vpc.Upa.Impl.DefaultEntity.UPDATE_DEPENDENT_FIELDS);
            if (dependency != null)
            {
                foreach (Net.Vpc.Upa.PrimitiveField aDependency in dependency)
                {
                    Net.Vpc.Upa.PrimitiveField df = (Net.Vpc.Upa.PrimitiveField)aDependency;
                    //include only dependent fields from the same entity
                    if (df.GetEntity().GetName().Equals(f.GetEntity().GetName()))
                    {
                        // add only formulas fields that are validateSupported
                        if (onPersist)
                        {
                            Net.Vpc.Upa.Formula ff = df.GetPersistFormula();
                            if (ff != null && df.GetModifiers().Contains(Net.Vpc.Upa.FieldModifier.PERSIST_FORMULA))
                            {
                                AddField(df);
                            }
                        }
                        else
                        {
                            Net.Vpc.Upa.Formula ff = df.GetUpdateFormula();
                            if (ff != null && df.GetModifiers().Contains(Net.Vpc.Upa.FieldModifier.UPDATE_FORMULA))
                            {
                                AddField(df);
                            }
                        }
                    }
                }
            }
            return(true);
        }