Example #1
0
 public String generateRealValue()
 {
     if (_option == null)
     {
         return(_value);
     }
     return(_option.generateRealValue(_value));
 }
        public void SetupValueAndType(InternalValueAndType valueAndType)
        {
            Object value = valueAndType.TargetValue;
            Type   type  = valueAndType.TargetType;

            // LikeSearchOption handling here is for OutsideSql.
            LikeSearchOption likeSearchOption = null;
            String           rearOption       = null;

            for (int pos = 1; pos < _names.Length; ++pos)
            {
                if (value == null)
                {
                    break;
                }
                String currentName = _names[pos];
                if (pos == 1)  // at the First Loop
                {
                    if (HasLikeSearchOption(type, currentName))
                    {
                        likeSearchOption = GetLikeSearchOption(type, currentName, value);
                    }
                }
                if (value is System.Collections.IDictionary)
                {
                    System.Collections.IDictionary map = (System.Collections.IDictionary)value;
                    value = map[currentName];
                    if (IsLastLoop4LikeSearch(pos, likeSearchOption) && IsValidStringValue(value))  // at the Last Loop
                    {
                        value      = likeSearchOption.generateRealValue((String)value);
                        rearOption = likeSearchOption.getRearOption();
                    }
                    type = (value != null ? value.GetType() : type);
                    continue;
                }
                if (value is NgMap)
                {
                    NgMap map = (NgMap)value;
                    value = map.getAsNg(currentName);
                    if (IsLastLoop4LikeSearch(pos, likeSearchOption) && IsValidStringValue(value))  // at the Last Loop
                    {
                        value      = likeSearchOption.generateRealValue((String)value);
                        rearOption = likeSearchOption.getRearOption();
                    }
                    type = (value != null ? value.GetType() : type);
                    continue;
                }
                PropertyInfo pi = type.GetProperty(currentName);
                if (pi != null)
                {
                    value = pi.GetValue(value, null);
                    if (IsLastLoop4LikeSearch(pos, likeSearchOption) && IsValidStringValue(value))  // at the Last Loop
                    {
                        value      = likeSearchOption.generateRealValue((String)value);
                        rearOption = likeSearchOption.getRearOption();
                    }
                    type = (value != null ? value.GetType() : pi.PropertyType);
                    continue;
                }
                if (pos == 1 && typeof(MapParameterBean).IsAssignableFrom(type))
                {
                    MapParameterBean             pmb = (MapParameterBean)value;
                    IDictionary <String, Object> map = pmb.ParameterMap;
                    Object elementValue = (map != null && map.ContainsKey(currentName) ? map[currentName] : null);
                    if (elementValue != null)
                    {
                        value = elementValue;
                        type  = elementValue.GetType();
                        continue;
                    }
                }
                ThrowBindOrEmbeddedCommentNotFoundPropertyException(_expression, type, currentName, _specifiedSql, _bind);
            }
            valueAndType.TargetValue = value;
            valueAndType.TargetType  = type;
            valueAndType.RearOption  = rearOption;
        }