Пример #1
0
        public IActionResult GetDescriptor([FromServices] DescriptorOfFormGenerator descriptorCreator,
                                           [FromQuery] string objectType, [FromQuery] int id = 0)
        {
            _logger.LogInformation(nameof(GetDescriptor));

            var roles = HttpContext.User.Claims.Where(claim => claim.Type == ClaimTypes.Role)
                        .Select(claim => claim.Value)
                        .ToList();

            if (roles == null || roles.Count() == 0)
            {
                return(BadRequest(new ResponseError("Роли пользователя отсутствуют")));
            }

            Type typeEntity;

            try
            {
                var dalAssembly = Assembly.Load(Assembly.GetExecutingAssembly().GetReferencedAssemblies()
                                                .FirstOrDefault(a => a.Name == "WBS.DAL"));
                var modelsTypes = dalAssembly.GetTypes().Where(type => type.Namespace == "WBS.DAL.Data.Models" ||
                                                               type.Namespace == "WBS.DAL.Authorization.Models");
                typeEntity = modelsTypes.FirstOrDefault(type => type.Name == objectType);
            }
            catch (ArgumentNullException)
            {
                return(BadRequest(new ResponseError("Данный тип не является частью системы.")));
            }

            var targetOfForm = id == 0 ? TypeOfDescriptor.AddingForm : TypeOfDescriptor.EditForm;

            try
            {
                var descriptor = descriptorCreator.CreateDescriptor(typeEntity, targetOfForm, roles);

                var descriptorJSON = DescriptorConverter.ConvertToJSON(descriptor);
                return(Ok(descriptorJSON));
            }
            catch (TypeAccessException)
            {
                return(Forbid("Отсутствует доступ к данному типу"));
            }
        }
Пример #2
0
        public TextualStyle Parse()
        {
            var textualStyle = new TextualStyle
            {
                //ForegroundDescriptor = new LiteralMaterialDescriptor(Palette.Blue.P600)
            };
            var selectorExpressionParts = _expression.Split(' ');

            foreach (var selectorExpressionPart in selectorExpressionParts)
            {
                _tokenizer = new Tokenizer(selectorExpressionPart);

                _tokenizer.SkipWhiteSpace();

                var beginFrame = _tokenizer.GetFrame();

                char c;
                if (!_tokenizer.TryRead(out c))
                {
                    throw new FormatException("Could not read from tokenizer.");
                }

                var cl = char.ToLower(c);
                if (cl == 't')
                {
                    var frame = _tokenizer.GetFrame();
                    if (_tokenizer.HasMore())
                    {
                        throw new FormatException(
                                  _tokenizer.GetExceptionRangeText(frame) +
                                  $"Unexpected character(s) after \'t\' fontweight flag");
                    }

                    textualStyle.SetValue(TextualStyle.FontWeightProperty, FontWeights.Thin);
                }
                else if (cl == 'l')
                {
                    var frame = _tokenizer.GetFrame();
                    if (_tokenizer.HasMore())
                    {
                        throw new FormatException(
                                  _tokenizer.GetExceptionRangeText(frame) +
                                  $"Unexpected character(s) after \'l\' fontweight flag");
                    }

                    textualStyle.SetValue(TextualStyle.FontWeightProperty, FontWeights.Light);
                }
                else if (cl == 'm')
                {
                    var frame = _tokenizer.GetFrame();
                    if (_tokenizer.HasMore())
                    {
                        throw new FormatException(
                                  _tokenizer.GetExceptionRangeText(frame) +
                                  $"Unexpected character(s) after \'m\' fontweight flag");
                    }

                    textualStyle.SetValue(TextualStyle.FontWeightProperty, FontWeights.Medium);
                }
                else if (cl == 'b')
                {
                    var frame = _tokenizer.GetFrame();
                    if (_tokenizer.HasMore())
                    {
                        throw new FormatException(
                                  _tokenizer.GetExceptionRangeText(frame) +
                                  $"Unexpected character(s) after \'b\' fontweight flag");
                    }

                    textualStyle.SetValue(TextualStyle.FontWeightProperty, FontWeights.Bold);
                }
                else if (cl == 'h')
                {
                    var frame = _tokenizer.GetFrame();
                    if (_tokenizer.HasMore())
                    {
                        throw new FormatException(
                                  _tokenizer.GetExceptionRangeText(frame) +
                                  $"Unexpected character(s) after \'h\' fontweight flag");
                    }

                    textualStyle.SetValue(TextualStyle.FontWeightProperty, FontWeights.Heavy);
                }
                else if (cl == 'o')
                {
                    var frame = _tokenizer.GetFrame();
                    if (_tokenizer.HasMore())
                    {
                        throw new FormatException(
                                  _tokenizer.GetExceptionRangeText(frame) +
                                  $"Unexpected character(s) after \'o\' fontstyle flag");
                    }

                    textualStyle.SetValue(TextualStyle.FontStyleProperty, FontStyles.Oblique);
                }
                else if (cl == 'i')
                {
                    var frame = _tokenizer.GetFrame();
                    if (_tokenizer.HasMore())
                    {
                        throw new FormatException(
                                  _tokenizer.GetExceptionRangeText(frame) +
                                  $"Unexpected character(s) after \'i\' fontstyle flag");
                    }

                    textualStyle.SetValue(TextualStyle.FontStyleProperty, FontStyles.Italic);
                }
                else if (c == '-' || cl == 'p' || cl == 'a')
                {
                    //TODO use new method .GetInsance for all code behind uses of Singleton xamlconverters
                    var descriptorConverter = new DescriptorConverter();
                    _tokenizer.Step(-1);
                    var frame = _tokenizer.GetFrame();

                    var strValue = scanUntil('#', false);

                    var value = descriptorConverter.ConvertFrom(strValue) as AbstractMaterialDescriptor;

                    textualStyle.SetValue(TextualStyle.ForegroundDescriptorProperty, value);
                }
                // SET TEXTROTATION PROPERTY
                else if (cl == 'r')
                {
                    TextRotation textRotation;
                    var          frame = _tokenizer.GetFrame();

                    char c3;
                    if (!_tokenizer.TryRead(out c3))
                    {
                        throw new FormatException(
                                  _tokenizer.GetExceptionRangeText(frame) +
                                  $"Expected rotation direction after \'r\' character. (\'r\' or \'l\').");
                    }

                    var c3l = char.ToLower(c3);
                    if (c3l == 'r')
                    {
                        _tokenizer.SkipWhiteSpace();
                        var frame2 = _tokenizer.GetFrame();
                        if (_tokenizer.HasMore())
                        {
                            throw new FormatException(
                                      _tokenizer.GetExceptionRangeText(frame2) +
                                      $"Unexpected character(s) after rotation direction.");
                        }

                        textRotation = TextRotation.Right;
                    }
                    else if (c3l == 'l')
                    {
                        _tokenizer.SkipWhiteSpace();
                        var frame2 = _tokenizer.GetFrame();
                        if (_tokenizer.HasMore())
                        {
                            throw new FormatException(
                                      _tokenizer.GetExceptionRangeText(frame2) +
                                      $"Unexpected character(s) after rotation direction.");
                        }

                        textRotation = TextRotation.Left;
                    }
                    else if (c3l == 'r')
                    {
                        _tokenizer.SkipWhiteSpace();
                        var frame2 = _tokenizer.GetFrame();
                        if (_tokenizer.HasMore())
                        {
                            throw new FormatException(
                                      _tokenizer.GetExceptionRangeText(frame2) +
                                      $"Unexpected character(s) after rotation direction.");
                        }

                        textRotation = TextRotation.None;
                    }
                    else
                    {
                        throw new FormatException(
                                  _tokenizer.GetExceptionRangeText(frame) +
                                  $"Unexpected rotation direction. Must be either \'l\', \'n\', or \'r\'.");
                    }
                    textualStyle.SetValue(TextualStyle.TextRotationProperty, textRotation);
                }
                else if (c.IsDigit() || c == '.')
                {
                    _tokenizer.Step(-1);
                    var numericLiteral = scanNumericLiteral();
                    _tokenizer.Step(-1);
                    _tokenizer.SkipWhiteSpace();

                    var frame3 = _tokenizer.GetFrame();

                    char c2;
                    if (!_tokenizer.TryRead(out c2))
                    {
                        throw new FormatException(
                                  _tokenizer.GetExceptionRangeText(frame3) +
                                  $"Expected font size unit type (\'em\' or \'%\') after relative font size numeric literal");
                    }

                    var c2l = char.ToLower(c2);
                    if (c2l == '%')
                    {
                        _tokenizer.SkipWhiteSpace();
                        var frame2 = _tokenizer.GetFrame();
                        if (_tokenizer.HasMore())
                        {
                            throw new FormatException(
                                      _tokenizer.GetExceptionRangeText(frame2) +
                                      $"Unexpected character(s) after font size unit type");
                        }

                        var numericValue = double.Parse(numericLiteral.LiteralValue) / 100;
                        textualStyle.SetValue(TextualStyle.RelativeFontSizeProperty, numericValue);
                    }
                    else if (c2l == 'e')
                    {
                        char c3;
                        if (!_tokenizer.TryRead(out c3))
                        {
                            throw new FormatException(
                                      _tokenizer.GetExceptionRangeText(frame3) +
                                      $"Expected font size unit type (\'em\' or \'%\') after relative font size numeric literal");
                        }
                        var c3l = char.ToLower(c3);
                        if (c3l == 'm')
                        {
                            _tokenizer.SkipWhiteSpace();
                            var frame2 = _tokenizer.GetFrame();
                            if (_tokenizer.HasMore())
                            {
                                throw new FormatException(
                                          _tokenizer.GetExceptionRangeText(frame2) +
                                          $"Unexpected character(s) after font size unit type");
                            }
                            var numericValue = double.Parse(numericLiteral.LiteralValue);
                            textualStyle.SetValue(TextualStyle.RelativeFontSizeProperty, numericValue);
                        }
                        else
                        {
                            throw new FormatException(
                                      _tokenizer.GetExceptionRangeText(frame3) +
                                      $"Unexpected font size unit type. Must be either \'em\' or \'%\'");
                        }
                    }
                    else
                    {
                        throw new FormatException(
                                  _tokenizer.GetExceptionRangeText(frame3) +
                                  $"Unexpected unit type. Must be either \'em\' or \'%\'");
                    }

                    _tokenizer.SkipWhiteSpace();
                    var frame = _tokenizer.GetFrame();


                    if (_tokenizer.Step(1) && _tokenizer.HasMore())
                    {
                        throw new FormatException(
                                  _tokenizer.GetExceptionRangeText(frame) +
                                  $"Unexpected character(s).");
                    }
                }
                else
                {
                    throw new FormatException(
                              _tokenizer.GetExceptionRangeText(beginFrame) +
                              $"Invalid character(s) in textualstyle expression.");
                }
            }
            return(textualStyle);
        }