public ITableCheckValidateNodeBase ToValidateNode(ref string err)
        {
            if (init)
            {
                return(validateNode);
            }

            init = true;

            validateNode = this.MakeValidateNode(ref err);
            return(validateNode);
        }
Beispiel #2
0
    private static ITableCheckValidateNodeBase DoMakeValidateNode(string validateNodeName, string parameter, List <ValidateConfig> childeConfigs, ref string err)
    {
        ITableCheckValidateNodeBase validateNode = null;

        if (string.Compare(validateNodeName, "DirectoryExist", StringComparison.OrdinalIgnoreCase) == 0)
        {
            validateNode = new DirectoryExistValidate(parameter);
        }
        else if (string.Compare(validateNodeName, "FileExist", StringComparison.OrdinalIgnoreCase) == 0)
        {
            validateNode = new FileExistValidate(parameter);
        }
        else if (string.Compare(validateNodeName, "Equal", StringComparison.OrdinalIgnoreCase) == 0)
        {
            validateNode = new EqualValidate(parameter);
        }
        else if (string.Compare(validateNodeName, "NoEqual", StringComparison.OrdinalIgnoreCase) == 0)
        {
            validateNode = new NoEqualValidate(parameter);
        }
        else if (string.Compare(validateNodeName, "Range", StringComparison.OrdinalIgnoreCase) == 0)
        {
            string[] rangeValues = parameter.Split(',');
            double   min, max;
            if (rangeValues.Length == 2 && double.TryParse(rangeValues[0], out min) &&
                double.TryParse(rangeValues[1], out max))
            {
                validateNode = new RangeValidate(min, max);
            }
            else
            {
                err = "期望的参数为2个,以,进行分格,并可以转化为浮点数";
            }
        }
        else if (string.Compare(validateNodeName, "NoEmpty", StringComparison.OrdinalIgnoreCase) == 0)
        {
            validateNode = new NoEmptyValidate();
        }
        else if (string.Compare(validateNodeName, "Lua", StringComparison.OrdinalIgnoreCase) == 0)
        {
            //validateNode = new LuaValidate(parameter);
        }
        else if (string.Compare(validateNodeName, "SpriteExist", StringComparison.OrdinalIgnoreCase) == 0)
        {
            validateNode = new SpriteExistValidate(parameter);
        }
        else if (string.Compare(validateNodeName, "ClassExist", StringComparison.OrdinalIgnoreCase) == 0)
        {
            validateNode = new ClassExist(parameter);
        }
        else if (string.Compare(validateNodeName, "FieldDependent", StringComparison.OrdinalIgnoreCase) == 0)
        {
            string[] rangeValues = parameter.Split(':');

            bool bOk = true;
            do
            {
                if (rangeValues.Length == 2)
                {
                    string tableName = rangeValues[0];
                    string fieldName = rangeValues[1];

#if UNITY_EDITOR
                    string tablePath = ClientDataBaseManager.Get().m_config.GetTableClassPath() + ClientDataBaseManager
                                       .Get().m_config.GetTableClassScriptName(tableName, true);
                    MonoScript script = AssetDatabase.LoadAssetAtPath <MonoScript>(tablePath);
                    if (script == null || script.GetClass() == null)
                    {
                        // 表不存在
                        bOk = false;
                        break;
                    }

                    var realFieldName = Utility.TypeRelate.CorrectFieldName(fieldName);
                    var filedObj      = script.GetType().GetProperty(realFieldName);
                    if (filedObj != null)
                    {
                        // 字段不存在
                        bOk = false;
                        break;
                    }
#endif
                    validateNode = new FieldDependentValidate(tableName, fieldName);
                }
            }while (false);

            if (!bOk)
            {
                err = "期望的参数为1个(表名:字段名), 同时要求表名跟字段名存在";
            }
        }
        else if (string.Compare(validateNodeName, "Filter", StringComparison.OrdinalIgnoreCase) == 0)
        {
            string[] filterValues = parameter.Split('|');
            if (filterValues.Length == 2)
            {
                string filterErr = string.Empty;
                ITableCheckValidateNodeBase filterNode = DoMakeValidateNode(filterValues[0], filterValues[1], childeConfigs, ref filterErr);

                if (filterNode == null)
                {
                    err = string.Format("过滤参数配置出错:({0})", filterErr);
                    return(null);
                }

                List <ITableCheckValidateNodeBase> childValidateNodes = new List <ITableCheckValidateNodeBase>();
                if (childeConfigs != null)
                {
                    foreach (var childConfig in childeConfigs)
                    {
                        filterErr = string.Empty;
                        ITableCheckValidateNodeBase childeValide = DoMakeValidateNode(childConfig.ValidateNode, childConfig.Parameter, childConfig.ChildConfigs, ref filterErr);
                        if (childeValide == null)
                        {
                            err = string.Format("过滤结点的子验证结点配置出错:([{0}]{1})", childConfig.ValidateNode, filterErr);
                            return(null);
                        }
                        childValidateNodes.Add(childeValide);
                    }
                }

                if (childValidateNodes.Count != 1)
                {
                    err = "过滤结点的子验证没有配置或者配置过多,期望配置一个";
                    return(null);
                }

                validateNode = new FilterValidate(filterNode, childValidateNodes);
            }
            else
            {
                err = "期望的参数以'|'分割,前面的为真正的验证结点,后面的为验证结点的参数";
            }
        }
        else
        {
            err = "无法找到对应的验证器:" + validateNodeName;
        }

        return(validateNode);
    }
Beispiel #3
0
 public FilterValidate(ITableCheckValidateNodeBase filter, List <ITableCheckValidateNodeBase> childCheckValidateNodes)
 {
     mFilter = filter;
     mChildCheckValidateNodes = childCheckValidateNodes;
 }