Ejemplo n.º 1
0
        public static void SetAnnotation <TEntity>(
            this EdmModel model,
            IEdmTerm term,
            IEdmExpression expression,
            Expression <Func <TEntity, object> > propertyExpression = null)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }
            var type = model.GetEdmType(typeof(TEntity)) as EdmEntityType;
            IEdmVocabularyAnnotatable target = type;

            if (propertyExpression != null)
            {
                var property = type.Properties().Single(p => p.Name == propertyExpression.GetAccessedProperty().Name);
                target = property;
            }
            var label = new EdmLabeledExpression("Value", expression);
            //var coll1 = new EdmCollectionExpression(new EdmStringConstant("test1"), new EdmStringConstant("test2"), new EdmStringConstant("test3"), label);
            //var coll = new EdmCollectionExpression(expression, coll1);
            var annotation = new EdmVocabularyAnnotation(target, term, label);

            annotation.SetSerializationLocation(model, target.ToSerializationLocation());
            model.AddVocabularyAnnotation(annotation);
        }
Ejemplo n.º 2
0
        static ODataExtensionsEdmModelExtensions()
        {
            IEnumerable <EdmError> errors;

            using (var stream = typeof(ODataExtensionsEdmModelExtensions).GetTypeInfo().Assembly.GetManifestResourceStream("Microsoft.AspNetCore.OData.Extensions.Vocabularies.MeasuresVocabularies.xml"))
            {
                CsdlReader.TryParse(XmlReader.Create(stream), out Instance, out errors);
            }
            //ISOCurrencyTerm = Instance.FindDeclaredTerm(MeasuresISOCurrency);
            var validationNs = "Validation";

            ValidationTerm          = StringEdmTerm("Expression", validationNs);
            ValidationRegexTerm     = StringEdmTerm("RegularExpression", validationNs);
            ValidationMaxLengthTerm = NumberEdmTerm("MaximumLength", validationNs);
            ValidationMinLengthTerm = NumberEdmTerm("MinimumLength", validationNs);
            ValidationRequiredTerm  = BooleanEdmTerm("Required", validationNs);
            //ISOCurrencyTerm = Instance.FindDeclaredValueTerm(MeasuresISOCurrency);
        }
Ejemplo n.º 3
0
        public static void SetValidationAnnotation <TEntity>(
            this EdmModel model,
            IEdmTerm term,
            IEdmExpression expression,
            string message,
            Expression <Func <TEntity, bool> > validationExpression = null,
            Expression <Func <TEntity, object> > propertyExpression = null)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            // TODO: If validation expression is null, then compile it from the IQL

            var type = model.GetEdmType(typeof(TEntity)) as EdmEntityType;
            IEdmVocabularyAnnotatable target = type;
            string propertyName = null;

            if (propertyExpression != null)
            {
                propertyName = propertyExpression.GetAccessedProperty().Name;
                var property = type.Properties().Single(p => p.Name == propertyName);
                target = property;
            }
            IqlQueryableAdapter.ExpressionConverter = () => new ExpressionToIqlConverter();
            //var iql = ExpressionToIqlExpressionParser<TEntity>.Parse(validationExpression);
            //var parser =
            //    new ActionParserInstance<ODataIqlData, ODataIqlExpressionAdapter>(new ODataIqlExpressionAdapter());

            var expressionLabel  = new EdmLabeledExpression("Expression", expression);
            var messageLabel     = new EdmLabeledExpression("Message", new EdmStringConstant(message));
            var coll             = new EdmCollectionExpression(expressionLabel, messageLabel);
            var annotation       = new EdmVocabularyAnnotation(target, term, coll);
            var validation       = ValidationMap.ForModel(model);
            var validationObject = new EntityValidation <TEntity>(validationExpression, message);

            validation.EntityValidation <TEntity>()
            .AddValidation(validationObject, propertyName);
            annotation.SetSerializationLocation(model, target.ToSerializationLocation());
            model.AddVocabularyAnnotation(annotation);
        }
        static AnnotationManagerBase()
        {
            IEnumerable <EdmError> errors;
            var assembly      = typeof(AnnotationManagerBase).GetTypeInfo().Assembly;
            var resourceNames = assembly.GetManifestResourceNames();
            var resourceName  = resourceNames.Single(rn => rn.EndsWith(".Vocabularies.MeasuresVocabularies.xml"));

            using (var stream = assembly.GetManifestResourceStream(resourceName))
            {
                CsdlReader.TryParse(XmlReader.Create(stream), out Instance, out errors);
            }
            //ISOCurrencyTerm = Instance.FindDeclaredTerm(MeasuresISOCurrency);
            var configurationNs = "Iql";
            var validationNs    = $"{configurationNs}.ValidationRules";

            DisplayTextFormatterTerm = StringEdmTerm("DisplayTextFormatter", configurationNs);
            IqlConfigurationTerm     = StringEdmTerm("Configuration", configurationNs);
            ValidationTerm           = StringEdmTerm("Expression", validationNs);
            ValidationRegexTerm      = StringEdmTerm("RegularExpression", validationNs);
            ValidationMaxLengthTerm  = NumberEdmTerm("MaximumLength", validationNs);
            ValidationMinLengthTerm  = NumberEdmTerm("MinimumLength", validationNs);
            ValidationRequiredTerm   = BooleanEdmTerm("Required", validationNs);
            //ISOCurrencyTerm = Instance.FindDeclaredValueTerm(MeasuresISOCurrency);
        }