コード例 #1
0
        public System.Collections.Generic.IEnumerable <IConceptInfo> CreateNewConcepts(System.Collections.Generic.IEnumerable <IConceptInfo> existingConcepts)
        {
            var activePropertyInfo = new BoolPropertyInfo
            {
                DataStructure = Entity,
                Name          = "Active"
            };

            var composableFilterActiveAndThis = new ComposableFilterByInfo
            {
                Expression = @"(items, repository, parameter) =>
                    {
                        if (parameter != null && parameter.ItemID.HasValue)
                            return items.Where(item => item.Active == null || item.Active.Value || item.ID == parameter.ItemID.Value);
                        else
                            return items.Where(item => item.Active == null || item.Active.Value);
                    }",
                Parameter  = "Rhetos.Dom.DefaultConcepts.ActiveItems",
                Source     = Entity
            };

            var systemRequired = new SystemRequiredInfo {
                Property = activePropertyInfo
            };

            return(new IConceptInfo[] { activePropertyInfo, composableFilterActiveAndThis, systemRequired });
        }
コード例 #2
0
ファイル: RegExMatchInfo.cs プロジェクト: tjakopovic/Rhetos
        public IEnumerable <IConceptInfo> CreateNewConcepts(IEnumerable <IConceptInfo> existingConcepts)
        {
            var filterParameter = new ParameterInfo
            {
                Module = Property.DataStructure.Module,
                Name   = Property.Name + "_RegExMatchFilter",
            };

            string filterExpression = string.Format(@"(source, repository, parameter) =>
                {{
                    var items = source.Where(item => !string.IsNullOrEmpty(item.{0})).Select(item => new {{ item.ID, item.{0} }}).ToList();
                    var regex = new System.Text.RegularExpressions.Regex({1});
                    var invalidItemIds = items.Where(item => !regex.IsMatch(item.{0})).Select(item => item.ID).ToList();
                    return Filter(source, invalidItemIds);
                }}",
                                                    Property.Name,
                                                    CsUtility.QuotedString("^" + RegularExpression + "$"));

            var itemFilterRegExMatchProperty = new ComposableFilterByInfo
            {
                Expression = filterExpression,
                Parameter  = filterParameter.Module.Name + "." + filterParameter.Name,
                Source     = Property.DataStructure
            };

            var invalidDataRegExMatchProperty = new InvalidDataMarkPropertyInfo
            {
                DependedProperty = Property,
                FilterType       = itemFilterRegExMatchProperty.Parameter,
                ErrorMessage     = ErrorMessage,
                Source           = Property.DataStructure
            };

            return(new IConceptInfo[] { filterParameter, itemFilterRegExMatchProperty, invalidDataRegExMatchProperty });
        }
コード例 #3
0
        public IEnumerable <IConceptInfo> CreateNewConcepts(IEnumerable <IConceptInfo> existingConcepts)
        {
            string limitSnippet = MinValueInfo.LimitSnippetByType
                                  .Where(snippet => snippet.Key.IsAssignableFrom(Property.GetType()))
                                  .Select(snippet => snippet.Value.Invoke(Value))
                                  .Single();

            var filterParameter = new ParameterInfo
            {
                Module = Property.DataStructure.Module,
                Name   = Property.Name + "_MaxValueFilter"
            };
            var filter = new ComposableFilterByInfo
            {
                Expression = String.Format(@"(items, repository, parameter) => {{ {1}; return items.Where(item => item.{0} != null && item.{0} > limit); }}", Property.Name, limitSnippet),
                Parameter  = filterParameter.Module.Name + "." + filterParameter.Name,
                Source     = Property.DataStructure
            };
            var invalidData = new InvalidDataMarkPropertyInfo
            {
                DependedProperty = Property,
                FilterType       = filter.Parameter,
                ErrorMessage     = String.Format("Maximum value of {0} is {1}.", Property.Name, Value),
                Source           = Property.DataStructure
            };

            return(new IConceptInfo[] { filterParameter, filter, invalidData });
        }
コード例 #4
0
ファイル: DeactivatableInfo.cs プロジェクト: kmeze/Rhetos
        public System.Collections.Generic.IEnumerable<IConceptInfo> CreateNewConcepts(System.Collections.Generic.IEnumerable<IConceptInfo> existingConcepts)
        {
            var activePropertyInfo = new BoolPropertyInfo
            {
                DataStructure = Entity,
                Name = "Active"
            };

            var composableFilterActiveAndThis = new ComposableFilterByInfo
            {
                Expression = @"(items, repository, filterParameter) =>
                    {
                        if (filterParameter != null && filterParameter.ItemID.HasValue)
                            return items.Where(item => item.Active == null || item.Active.Value || item.ID == filterParameter.ItemID.Value);
                        else
                            return items.Where(item => item.Active == null || item.Active.Value);
                    }",
                Parameter = "Rhetos.Dom.DefaultConcepts.ActiveItems",
                Source = Entity
            };

            var systemRequired = new SystemRequiredInfo { Property = activePropertyInfo };

            return new IConceptInfo[] { activePropertyInfo, composableFilterActiveAndThis, systemRequired };
        }
コード例 #5
0
ファイル: ItemFilterInfo.cs プロジェクト: koav/Rhetos
        public IEnumerable<IConceptInfo> CreateNewConcepts(IEnumerable<IConceptInfo> existingConcepts)
        {
            var newConcepts = new List<IConceptInfo>();

            ParameterInfo filterParameter;
            var filterNameElements = FilterName.Split('.');
            if (filterNameElements.Count() == 2)
                filterParameter = new ParameterInfo { Module = new ModuleInfo { Name = filterNameElements[0] }, Name = filterNameElements[1] };
            else
                filterParameter = new ParameterInfo { Module = Source.Module, Name = FilterName };

            if (!existingConcepts.OfType<DataStructureInfo>() // Existing filter parameter does not have to be a ParameterInfo. Any DataStructureInfo is allowed.
                .Any(item => item.Module.Name == filterParameter.Module.Name && item.Name == filterParameter.Name))
                    newConcepts.Add(filterParameter);

            var composableFilter = new ComposableFilterByInfo
            {
                Source = Source,
                Parameter = filterParameter.GetKeyProperties(),
                Expression = "(source, repository, parameter) => source.Where(" + Expression + ")"
            };

            newConcepts.Add(composableFilter);

            return newConcepts;
        }
コード例 #6
0
        private static string FilterImplementationSnippet(ComposableFilterByInfo info)
        {
            return string.Format(
            @"        private static readonly Func<IQueryable<{0}>, Common.DomRepository, {1}, IQueryable<{0}>> {2} =
            {3};

            public IQueryable<{0}> Filter(IQueryable<{0}> source, {1} parameter)
            {{
            return {2}(source, _domRepository, parameter);
            }}

            ",
            info.Source.GetKeyProperties(),
            info.Parameter,
            FilterExpressionPropertyName(info),
            info.Expression);
        }
コード例 #7
0
        private static string FilterImplementationSnippet(ComposableFilterByInfo info)
        {
            return string.Format(
        @"public IQueryable<Common.Queryable.{0}_{1}> Filter(IQueryable<Common.Queryable.{0}_{1}> localSource, {2} localParameter)
        {{
            Func<IQueryable<Common.Queryable.{0}_{1}>, Common.DomRepository, {2}" + AdditionalParametersTypeTag.Evaluate(info) + @", IQueryable<Common.Queryable.{0}_{1}>> filterFunction =
            {3};

            " + BeforeFilterTag.Evaluate(info) + @"
            return filterFunction(localSource, _domRepository, localParameter" + AdditionalParametersArgumentTag.Evaluate(info) + @");
        }}

        ",
            info.Source.Module.Name,
            info.Source.Name,
            info.Parameter,
            info.Expression);
        }
コード例 #8
0
        private static string FilterImplementationSnippet(ComposableFilterByInfo info)
        {
            return string.Format(
            @"        private static readonly Func<IQueryable<{0}>, Common.DomRepository, {1}{4}, IQueryable<{0}>> {2} =
            {3};

            public IQueryable<{0}> Filter(IQueryable<{0}> source, {1} parameter)
            {{
            {6}
            return {2}(source, _domRepository, parameter{5});
            }}

            ",
            info.Source.GetKeyProperties(),
            info.Parameter,
            FilterExpressionPropertyName(info),
            info.Expression,
            AdditionalParametersTypeTag.Evaluate(info),
            AdditionalParametersArgumentTag.Evaluate(info),
            BeforeFilterTag.Evaluate(info));
        }
コード例 #9
0
        public IEnumerable <IConceptInfo> CreateNewConcepts(ItemFilterInfo conceptInfo, IDslModel existingConcepts)
        {
            var newConcepts = new List <IConceptInfo>();

            ParameterInfo filterParameter = GetGeneratedFilter(conceptInfo);

            if (!existingConcepts.FindByType <DataStructureInfo>() // Existing filter parameter does not have to be a ParameterInfo. Any DataStructureInfo is allowed.
                .Any(item => item.Module.Name == filterParameter.Module.Name && item.Name == filterParameter.Name))
            {
                newConcepts.Add(filterParameter);
            }

            var composableFilter = new ComposableFilterByInfo
            {
                Source     = conceptInfo.Source,
                Parameter  = filterParameter.GetKeyProperties(),
                Expression = "(source, repository, parameter) => source.Where(" + conceptInfo.Expression + ")"
            };

            newConcepts.Add(composableFilter);

            return(newConcepts);
        }
コード例 #10
0
ファイル: MinValueInfo.cs プロジェクト: TinOroz/Rhetos
        public IEnumerable <IConceptInfo> CreateNewConcepts(IEnumerable <IConceptInfo> existingConcepts)
        {
            string limitSnippet = LimitSnippetByType
                                  .Where(snippet => snippet.Key.IsAssignableFrom(Property.GetType()))
                                  .Select(snippet => snippet.Value.Invoke(Value))
                                  .Single();

            var filterParameter = new ParameterInfo
            {
                Module = Property.DataStructure.Module,
                Name   = Property.Name + "_MinValueFilter"
            };
            var filter = new ComposableFilterByInfo
            {
                Expression = String.Format(@"(items, repository, parameter) => {{ {1}; return items.Where(item => item.{0} != null && item.{0} < limit); }}", Property.Name, limitSnippet),
                Parameter  = filterParameter.Module.Name + "." + filterParameter.Name,
                Source     = Property.DataStructure
            };
            var invalidData = new InvalidDataInfo
            {
                Source       = Property.DataStructure,
                FilterType   = filter.Parameter,
                ErrorMessage = "Minimum value of {0} is {1}."
            };
            var messageParameters = new InvalidDataMessageParametersConstantInfo
            {
                InvalidData       = invalidData,
                MessageParameters = CsUtility.QuotedString(Property.Name) + ", " + CsUtility.QuotedString(Value)
            };
            var invalidProperty = new InvalidDataMarkProperty2Info
            {
                InvalidData  = invalidData,
                MarkProperty = Property
            };

            return(new IConceptInfo[] { filterParameter, filter, invalidData, messageParameters, invalidProperty });
        }
コード例 #11
0
ファイル: MaxValueInfo.cs プロジェクト: tjakopovic/Rhetos
        public IEnumerable<IConceptInfo> CreateNewConcepts(IEnumerable<IConceptInfo> existingConcepts)
        {
            string limitSnippet = MinValueInfo.LimitSnippetByType
                .Where(snippet => snippet.Key.IsAssignableFrom(Property.GetType()))
                .Select(snippet => snippet.Value.Invoke(Value))
                .Single();

            var filterParameter = new ParameterInfo
            {
                Module = Property.DataStructure.Module,
                Name = Property.Name + "_MaxValueFilter"
            };
            var filter = new ComposableFilterByInfo
            {
                Expression = String.Format(@"(items, repository, parameter) => {{ {1}; return items.Where(item => item.{0} != null && item.{0} > limit); }}", Property.Name, limitSnippet),
                Parameter = filterParameter.Module.Name + "." + filterParameter.Name,
                Source = Property.DataStructure
            };
            var invalidData = new InvalidDataMarkPropertyInfo
            {
                DependedProperty = Property,
                FilterType = filter.Parameter,
                ErrorMessage = String.Format("Maximum value of {0} is {1}.", Property.Name, Value),
                Source = Property.DataStructure
            };
            return new IConceptInfo[] { filterParameter, filter, invalidData };
        }
コード例 #12
0
        public IEnumerable <IConceptInfo> CreateNewConcepts(IEnumerable <IConceptInfo> existingConcepts)
        {
            var newConcepts = new List <IConceptInfo>();

            // Expand the base entity:
            var activeSinceProperty = new DateTimePropertyInfo {
                DataStructure = Entity, Name = "ActiveSince"
            };                                                                                                   // TODO: SystemRequired, Default 1.1.1900.
            var activeSinceHistory = new EntityHistoryPropertyInfo {
                Property = activeSinceProperty
            };

            newConcepts.AddRange(new IConceptInfo[] { activeSinceProperty, activeSinceHistory });

            // InvalidData for base entity: it is not allowed to save with ActiveSince older than last one used in History
            var denyFilter = new ComposableFilterByInfo {
                Parameter  = "Common.OlderThanHistoryEntries",
                Source     = Entity,
                Expression = String.Format(
                    @"(items, repository, parameter) => items.Where(item => 
                                repository.{0}.{1}_Changes.Subquery.Where(his => his.ActiveSince >= item.ActiveSince && his.Entity == item).Count() > 0)",
                    Entity.Module.Name,
                    Entity.Name)
            };
            var invalidDataValidation = new InvalidDataMarkPropertyInfo {
                FilterType       = "Common.OlderThanHistoryEntries",
                Source           = Entity,
                ErrorMessage     = "ActiveSince is not allowed to be older than last entry in history.",
                DependedProperty = activeSinceProperty
            };

            newConcepts.AddRange(new IConceptInfo[] { denyFilter, invalidDataValidation, new ParameterInfo {
                                                          Module = new ModuleInfo {
                                                              Name = "Common"
                                                          }, Name = "OlderThanHistoryEntries"
                                                      } });

            // Create a new entity for history data:
            var currentProperty = new ReferencePropertyInfo {
                DataStructure = Dependency_ChangesEntity, Name = "Entity", Referenced = Entity
            };
            var historyActiveSinceProperty = new DateTimePropertyInfo {
                DataStructure = Dependency_ChangesEntity, Name = activeSinceProperty.Name
            };

            newConcepts.AddRange(new IConceptInfo[] {
                currentProperty,
                new ReferenceDetailInfo {
                    Reference = currentProperty
                },
                new RequiredPropertyInfo {
                    Property = currentProperty
                },                                                       // TODO: SystemRequired
                new PropertyFromInfo {
                    Destination = Dependency_ChangesEntity, Source = activeSinceProperty
                },
                historyActiveSinceProperty,
                new UniquePropertiesInfo {
                    DataStructure = Dependency_ChangesEntity, Property1 = currentProperty, Property2 = historyActiveSinceProperty
                }
            });

            // InvalidData for history entity: it is not allowed to save with ActiveSince newer than current entity
            var denyFilterHistory = new ComposableFilterByInfo
            {
                Parameter  = "Common.NewerThanCurrentEntry",
                Source     = Dependency_ChangesEntity,
                Expression = @"(items, repository, parameter) => items.Where(item => item.ActiveSince > item.Entity.ActiveSince)"
            };
            var invalidDataValidationHistory = new InvalidDataMarkPropertyInfo
            {
                FilterType       = "Common.NewerThanCurrentEntry",
                Source           = Dependency_ChangesEntity,
                ErrorMessage     = "ActiveSince of history entry is not allowed to be newer than current entry.",
                DependedProperty = historyActiveSinceProperty
            };

            newConcepts.AddRange(new IConceptInfo[] { denyFilterHistory, invalidDataValidationHistory, new ParameterInfo {
                                                          Module = new ModuleInfo {
                                                              Name = "Common"
                                                          }, Name = "NewerThanCurrentEntry"
                                                      } });

            // Create ActiveUntil SqlQueryable:
            var activeUntilSqlQueryable = new SqlQueryableInfo {
                Module = Entity.Module, Name = Entity.Name + "_ChangesActiveUntil", SqlSource = ActiveUntilSqlSnippet()
            };

            newConcepts.AddRange(new IConceptInfo[] {
                activeUntilSqlQueryable,
                new DateTimePropertyInfo {
                    DataStructure = activeUntilSqlQueryable, Name = "ActiveUntil"
                },
                new SqlDependsOnDataStructureInfo {
                    Dependent = activeUntilSqlQueryable, DependsOn = Dependency_ChangesEntity
                },
                new SqlDependsOnDataStructureInfo {
                    Dependent = activeUntilSqlQueryable, DependsOn = Entity
                },
                new DataStructureExtendsInfo {
                    Base = Dependency_ChangesEntity, Extension = activeUntilSqlQueryable
                }
            });

            // Configure History SqlQueryable:
            newConcepts.AddRange(new IConceptInfo[] {
                new SqlDependsOnDataStructureInfo {
                    Dependent = Dependency_HistorySqlQueryable, DependsOn = Entity
                },
                new SqlDependsOnDataStructureInfo {
                    Dependent = Dependency_HistorySqlQueryable, DependsOn = Dependency_ChangesEntity
                },
                new SqlDependsOnDataStructureInfo {
                    Dependent = Dependency_HistorySqlQueryable, DependsOn = activeUntilSqlQueryable
                },
                new DateTimePropertyInfo {
                    DataStructure = Dependency_HistorySqlQueryable, Name = "ActiveUntil"
                },
                new AllPropertiesFromInfo {
                    Source = Dependency_ChangesEntity, Destination = Dependency_HistorySqlQueryable
                }
            });

            // Configure AtTime SqlFunction:
            newConcepts.Add(new SqlDependsOnDataStructureInfo {
                Dependent = Dependency_AtTimeSqlFunction, DependsOn = Dependency_HistorySqlQueryable
            });

            return(newConcepts);
        }
コード例 #13
0
ファイル: EntityHistoryInfo.cs プロジェクト: davorpr1/Rhetos
        public IEnumerable<IConceptInfo> CreateNewConcepts(IEnumerable<IConceptInfo> existingConcepts)
        {
            var newConcepts = new List<IConceptInfo>();

            // Expand the base entity:
            var activeSinceProperty = new DateTimePropertyInfo { DataStructure = Entity, Name = "ActiveSince" }; // TODO: SystemRequired, Default 1.1.1900.
            var activeSinceHistory = new EntityHistoryPropertyInfo { Property = activeSinceProperty };
            newConcepts.AddRange(new IConceptInfo[] { activeSinceProperty, activeSinceHistory });

            // InvalidData for base entity: it is not allowed to save with ActiveSince older than last one used in History
            var denyFilter = new ComposableFilterByInfo {
                Parameter = "Common.OlderThanHistoryEntries",
                Source = Entity,
                Expression = String.Format(
                    @"(items, repository, parameter) => items.Where(item => 
                                repository.{0}.{1}_Changes.Subquery.Where(his => his.ActiveSince >= item.ActiveSince && his.Entity == item).Count() > 0)", 
                                Entity.Module.Name, 
                                Entity.Name) 
            };
            var invalidDataValidation = new InvalidDataMarkPropertyInfo {
                FilterType = "Common.OlderThanHistoryEntries", 
                Source = Entity, 
                ErrorMessage = "ActiveSince is not allowed to be older than last entry in history.", 
                DependedProperty = activeSinceProperty 
            };
            newConcepts.AddRange(new IConceptInfo[] { denyFilter, invalidDataValidation, new ParameterInfo { Module = new ModuleInfo { Name = "Common" }, Name = "OlderThanHistoryEntries" } });

            // Create a new entity for history data:
            var currentProperty = new ReferencePropertyInfo { DataStructure = Dependency_ChangesEntity, Name = "Entity", Referenced = Entity };
            var historyActiveSinceProperty = new DateTimePropertyInfo { DataStructure = Dependency_ChangesEntity, Name = activeSinceProperty.Name };
            newConcepts.AddRange(new IConceptInfo[] {
                currentProperty,
                new ReferenceDetailInfo { Reference = currentProperty },
                new RequiredPropertyInfo { Property = currentProperty }, // TODO: SystemRequired
                new PropertyFromInfo { Destination = Dependency_ChangesEntity, Source = activeSinceProperty },
                historyActiveSinceProperty,
                new UniquePropertiesInfo { DataStructure = Dependency_ChangesEntity, Property1 = currentProperty, Property2 = historyActiveSinceProperty }
            });

            // InvalidData for history entity: it is not allowed to save with ActiveSince newer than current entity
            var denyFilterHistory = new ComposableFilterByInfo
            {
                Parameter = "Common.NewerThanCurrentEntry",
                Source = Dependency_ChangesEntity,
                Expression = @"(items, repository, parameter) => items.Where(item => item.ActiveSince > item.Entity.ActiveSince)"
            };
            var invalidDataValidationHistory = new InvalidDataMarkPropertyInfo
            {
                FilterType = "Common.NewerThanCurrentEntry",
                Source = Dependency_ChangesEntity,
                ErrorMessage = "ActiveSince of history entry is not allowed to be newer than current entry.",
                DependedProperty = historyActiveSinceProperty
            };
            newConcepts.AddRange(new IConceptInfo[] { denyFilterHistory, invalidDataValidationHistory, new ParameterInfo { Module = new ModuleInfo { Name = "Common" }, Name = "NewerThanCurrentEntry" } });

            // Create ActiveUntil SqlQueryable:
            var activeUntilSqlQueryable = new SqlQueryableInfo { Module = Entity.Module, Name = Entity.Name + "_ChangesActiveUntil", SqlSource = ActiveUntilSqlSnippet() };
            newConcepts.AddRange(new IConceptInfo[] {
                activeUntilSqlQueryable,
                new DateTimePropertyInfo { DataStructure = activeUntilSqlQueryable, Name = "ActiveUntil" },
                new SqlDependsOnDataStructureInfo { Dependent = activeUntilSqlQueryable, DependsOn = Dependency_ChangesEntity },
                new SqlDependsOnDataStructureInfo { Dependent = activeUntilSqlQueryable, DependsOn = Entity },
                new DataStructureExtendsInfo { Base = Dependency_ChangesEntity, Extension = activeUntilSqlQueryable }
            });

            // Configure History SqlQueryable:
            newConcepts.AddRange(new IConceptInfo[] {
                new SqlDependsOnDataStructureInfo { Dependent = Dependency_HistorySqlQueryable, DependsOn = Entity },
                new SqlDependsOnDataStructureInfo { Dependent = Dependency_HistorySqlQueryable, DependsOn = Dependency_ChangesEntity },
                new SqlDependsOnDataStructureInfo { Dependent = Dependency_HistorySqlQueryable, DependsOn = activeUntilSqlQueryable },
                new DateTimePropertyInfo { DataStructure = Dependency_HistorySqlQueryable, Name = "ActiveUntil" },
                new AllPropertiesFromInfo { Source = Dependency_ChangesEntity, Destination = Dependency_HistorySqlQueryable }
            });

            // Configure AtTime SqlFunction:
            newConcepts.Add(new SqlDependsOnDataStructureInfo { Dependent = Dependency_AtTimeSqlFunction, DependsOn = Dependency_HistorySqlQueryable });

            return newConcepts;
        }
コード例 #14
0
 private static string FilterExpressionPropertyName(ComposableFilterByInfo info)
 {
     return "_composableFilterExpression_" + CsUtility.TextToIdentifier(info.Parameter);
 }
コード例 #15
0
ファイル: MinValueInfo.cs プロジェクト: davorpr1/Rhetos
        public IEnumerable<IConceptInfo> CreateNewConcepts(IEnumerable<IConceptInfo> existingConcepts)
        {
            string limitSnippet = LimitSnippetByType
                .Where(snippet => snippet.Key.IsAssignableFrom(Property.GetType()))
                .Select(snippet => snippet.Value.Invoke(Value))
                .Single();

            var filterParameter = new ParameterInfo
            {
                Module = Property.DataStructure.Module,
                Name = Property.Name + "_MinValueFilter"
            };
            var filter = new ComposableFilterByInfo
            {
                Expression = String.Format(@"(items, repository, parameter) => {{ {1}; return items.Where(item => item.{0} != null && item.{0} < limit); }}", Property.Name, limitSnippet),
                Parameter = filterParameter.Module.Name + "." + filterParameter.Name,
                Source = Property.DataStructure
            };
            var invalidData = new InvalidDataInfo
            {
                Source = Property.DataStructure,
                FilterType = filter.Parameter,
                ErrorMessage = "Minimum value of {0} is {1}."
            };
            var messageParameters = new InvalidDataMessageParametersConstantInfo
            {
                InvalidData = invalidData,
                MessageParameters = CsUtility.QuotedString(Property.Name) + ", " + CsUtility.QuotedString(Value)
            };
            var invalidProperty = new InvalidDataMarkProperty2Info
            {
                InvalidData = invalidData,
                MarkProperty = Property
            };
            return new IConceptInfo[] { filterParameter, filter, invalidData, messageParameters, invalidProperty };
        }
コード例 #16
0
ファイル: RegExMatchInfo.cs プロジェクト: tjakopovic/Rhetos
        public IEnumerable<IConceptInfo> CreateNewConcepts(IEnumerable<IConceptInfo> existingConcepts)
        {
            var filterParameter = new ParameterInfo
            {
                Module = Property.DataStructure.Module,
                Name = Property.Name + "_RegExMatchFilter",
            };

            string filterExpression = string.Format(@"(source, repository, parameter) =>
                {{
                    var items = source.Where(item => !string.IsNullOrEmpty(item.{0})).Select(item => new {{ item.ID, item.{0} }}).ToList();
                    var regex = new System.Text.RegularExpressions.Regex({1});
                    var invalidItemIds = items.Where(item => !regex.IsMatch(item.{0})).Select(item => item.ID).ToList();
                    return Filter(source, invalidItemIds);
                }}",
                Property.Name,
                CsUtility.QuotedString("^" + RegularExpression + "$"));

            var itemFilterRegExMatchProperty = new ComposableFilterByInfo
            {
                Expression = filterExpression,
                Parameter = filterParameter.Module.Name + "." + filterParameter.Name,
                Source = Property.DataStructure
            };

            var invalidDataRegExMatchProperty = new InvalidDataMarkPropertyInfo
            {
                DependedProperty = Property,
                FilterType = itemFilterRegExMatchProperty.Parameter,
                ErrorMessage = ErrorMessage,
                Source = Property.DataStructure
            };

            return new IConceptInfo[] { filterParameter, itemFilterRegExMatchProperty, invalidDataRegExMatchProperty };
        }