Exemplo n.º 1
0
        private HqlResult ConvertToHql(string expression, string tableConfigId = null, Action <JsonLogic2HqlConverterContext> prepareContextAction = null)
        {
            // Parse json into hierarchical structure
            var rule = JObject.Parse(expression);

            // Create an evaluator with default operators.
            var evaluator = new JsonLogic2HqlConverter();

            var context = new JsonLogic2HqlConverterContext();

            if (!string.IsNullOrWhiteSpace(tableConfigId))
            {
                WithUnitOfWork(() =>
                {
                    var tableConfig = _tableConfigStore.GetTableConfiguration(tableConfigId);
                    DataTableHelper.FillVariablesResolvers(tableConfig.Columns, context);
                    DataTableHelper.FillContextMetadata(tableConfig.Columns, context);
                });
            }

            prepareContextAction?.Invoke(context);

            // Apply the rule to the data.
            var result = evaluator.Convert(rule, context);

            return(new HqlResult
            {
                Hql = result,
                Context = context
            });
        }
Exemplo n.º 2
0
        private void AppendFilterCriteria <TEntity>(FilterCriteria filterCriteria, string filter)
        {
            if (string.IsNullOrWhiteSpace(filter))
            {
                return;
            }

            // JsonLogic is converted to HQL
            var jsonLogic = JObject.Parse(filter);

            // convert json logic to HQL
            var context = new JsonLogic2HqlConverterContext();

            var properties = _metadataProvider.GetProperties(typeof(TEntity));

            DataTableHelper.FillVariablesResolvers(properties, context);
            DataTableHelper.FillContextMetadata(properties, context);

            var hql = _jsonLogic2HqlConverter.Convert(jsonLogic, context);

            filterCriteria.FilterClauses.Add(hql);
            foreach (var parameter in context.FilterParameters)
            {
                filterCriteria.FilterParameters.Add(parameter.Key, parameter.Value);
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Fill metadata of the <see cref="JsonLogic2HqlConverterContext"/> with specified columns
 /// </summary>
 public static void FillContextMetadata(List <DataTableColumn> columns, JsonLogic2HqlConverterContext context)
 {
     context.FieldsMetadata = columns.ToDictionary(
         c => c.Name,
         c => {
         return(new PropertyMetadata
         {
             Name = c.Name,
             Label = c.Caption,
             Description = c.Description,
             DataType = c.StandardDataType,
         } as IPropertyMetadata);
     }
         );
 }
Exemplo n.º 4
0
        public void NestedColumnResolver_Convert()
        {
            var expression = _nestedColumnResolver_expression;

            // Parse json into hierarchical structure
            var rule = JObject.Parse(expression);

            // Create an evaluator with default operators.
            var evaluator = new JsonLogic2HqlConverter();

            var context = new JsonLogic2HqlConverterContext();

            context.VariablesResolvers.Add("User_UserName", "User.UserName");

            // Apply the rule to the data.
            var hql = evaluator.Convert(rule, context);


            // fill parameters using context
            Assert.Equal(@"(ent.User.UserName = :par1)", hql);
            Assert.Single(context.FilterParameters);
            Assert.Equal("admin", context.FilterParameters.FirstOrDefault().Value);
        }
Exemplo n.º 5
0
 /// <summary>
 /// Fill variable resolvers of the <see cref="JsonLogic2HqlConverterContext"/> with columns of the specified <paramref name="tableConfig"/>
 /// </summary>
 public static void FillVariablesResolvers(List <PropertyMetadataDto> properties, JsonLogic2HqlConverterContext context)
 {
     context.VariablesResolvers = properties.ToDictionary(c => c.Path, c => c.Path);
 }
Exemplo n.º 6
0
 /// <summary>
 /// Fill variable resolvers of the <see cref="JsonLogic2HqlConverterContext"/> with columns of the specified <paramref name="tableConfig"/>
 /// </summary>
 public static void FillVariablesResolvers(List <DataTableColumn> columns, JsonLogic2HqlConverterContext context)
 {
     context.VariablesResolvers = columns.ToDictionary(c => c.Name, c => c.PropertyName);
 }
Exemplo n.º 7
0
 /// <summary>
 /// Fill metadata of the <see cref="JsonLogic2HqlConverterContext"/> with columns of the specified <paramref name="tableConfig"/>
 /// </summary>
 public static void FillContextMetadata(List <PropertyMetadataDto> properties, JsonLogic2HqlConverterContext context)
 {
     context.FieldsMetadata = properties.ToDictionary(
         c => c.Path,
         c => new PropertyMetadata
     {
         Name        = c.Path,
         Label       = c.Label,
         Description = c.Description,
         DataType    = c.DataType
     } as IPropertyMetadata
         );
 }