Ejemplo n.º 1
0
 public object Create(IEnumerable<KeyValuePair<string, object>> arguments)
 {
     var list = new LogicErrorList(LogicErrorType.Internal);
     var res=Create(arguments, list);
     list.ThrowException(LogicErrorLevel.Error);
     return res;
 }
Ejemplo n.º 2
0
 public static void CheckConsistancy(object obj, LogicErrorList list)
 {
     TreeRunDown(new FieldAddress(), obj, (a, o) =>
                                              {
                                                  if (o is ICheckable)
                                                  {
                                                      list.SetAddress(a);
                                                      (o as ICheckable).CheckSelfConsistancy(list);
                                                  }
                                              }, null);
 }
Ejemplo n.º 3
0
 protected override void ContextParse(TextMold mold, Type type, LogicErrorList errors)
 {
     var cat = TypeResolver.GetResolver(type).Category;
     if (mold.Value == null) return;
     if (cat == Categories.Field) return;
     var p = mold.Value;
     switch (cat)
     {
         case Categories.Dictionary:
         case Categories.Node:
             if (!fieldRegex.Match(mold.Value).Success)
             {
                 errors.Add(LogicErrorLevel.Error, string.Format("Неправильное присвоение {0}. Строка: {1}", cat.ToString(), p));
                 return;
             }
             p.Split(' ').ToList().ForEach(
                 a =>
                 {
                     if (a.Length == 0) return;
                     var pairs = a.Split(':').Select(b => b.Trim());
                     if (pairs.Count() < 2)
                         errors.Add(LogicErrorLevel.Error, string.Format("Неверный формат описания.\nОбрабатываемая строка: {1}\nОшибка: {2}", mold.Address.GetDottedString(), p, a));
                     else
                     {
                         var newAddr = new FieldAddress(pairs.First());
                         newAddr = mold.Address.Child(newAddr);
                         GetMold(newAddr).Value = pairs.Last();
                     }
                 }
             );
             return;
         case Categories.Tensor:
         case Categories.List:
             var parts = p.Split('|');
             for (int i = 0; i < parts.Length; ++i)
                 GetMold(mold.Address.Child(i.ToString())).Value = parts[i];
             return;
     }
 }
Ejemplo n.º 4
0
 /// <summary>
 /// Создает исключение с указанным списком ошибок
 /// </summary>
 public LogicException(LogicErrorList list)
     : base(list.CreateText())
 {
     ErrorList = list;
 }
Ejemplo n.º 5
0
 public abstract object Create(IEnumerable<KeyValuePair<string, object>> arguments, LogicErrorList list);
Ejemplo n.º 6
0
        public void SetElementAndProcessErrors(object obj, string sub, object value, LogicErrorList errors)
        {
            try
            {
                SetElement(obj, sub, value);
            }
            catch (Exception e)
            {
                //развернуть ошибку TargetInvokation, тип всегда error, если листа нет, то выбросить внутренний эксепшн
                // Если не установлен список ошибок в ThornadoDispatch
                // то добавленную туда ошибку, вероятно, никто не ждет
                // поэтому громко сообщаем о ней пробросом эксепшена наружу
                if (errors == null)
                {
                    throw new Exception(e.InnerException.Message);
                }

                // Приводим полученное исключение к типу ThornadoException,
                // если это возможно
                try
                {
                    var thornadoException = (ThornadoException)e.InnerException;
                    errors.Add(
                        thornadoException.Level,
                        thornadoException.Message);
                }
                catch
                {
                    if (e.InnerException != null)
                        // Иначе полученное исключение общего вида
                        errors.Add(
                            LogicErrorLevel.Error,
                            e.InnerException.Message);
                    else
                        errors.Add(
                            LogicErrorLevel.Error,
                            e.Message);
                }
            }
        }