Ejemplo n.º 1
0
        protected virtual NormalWindow SetNormalWindowEntity(NormalWindow win, ModifiableEntity entity, ViewOptionsBase options, EntitySettings es, Control ctrl)
        {
            Type entityType = entity.GetType();

            win.MainControl    = ctrl;
            win.ShowOperations = options.ShowOperations;
            win.ViewMode       = options.ViewButtons;

            entity = options.Clone ? (ModifiableEntity)((ICloneable)entity).Clone() : entity;
            win.OnPreEntityLoaded(entity);
            win.DataContext = entity;

            if (options.ReadOnly ?? OnIsReadOnly(entityType, entity))
            {
                Common.SetIsReadOnly(win, true);
            }

            if (options is ViewOptions)
            {
                win.SaveProtected = ((ViewOptions)options).RequiresSaveOperation ??
                                    (typeof(Entity).IsAssignableFrom(entityType) && EntityKindCache.RequiresSaveOperation(entityType)); //Matters even on Ok
            }
            TaskNormalWindow?.Invoke(win, entity);

            return(win);
        }
Ejemplo n.º 2
0
        public override object?ReadJson(JsonReader reader, Type objectType, object?existingValue, JsonSerializer serializer)
        {
            using (HeavyProfiler.LogNoStackTrace("ReadJson", () => objectType.Name))
            {
                if (reader.TokenType == JsonToken.Null)
                {
                    return(null);
                }

                using (EntityCache ec = new EntityCache())
                {
                    reader.Assert(JsonToken.StartObject);

                    ModifiableEntity mod = GetEntity(reader, objectType, existingValue, out bool markedAsModified);

                    var pr = GetCurrentPropertyRoute(mod);

                    var dic = PropertyConverter.GetPropertyConverters(mod.GetType());
                    using (JsonSerializerExtensions.SetAllowDirectMListChanges(markedAsModified))
                        while (reader.TokenType == JsonToken.PropertyName)
                        {
                            if ((string)reader.Value ! == "mixins")
                            {
                                var entity = (Entity)mod;
                                reader.Read();
                                reader.Assert(JsonToken.StartObject);

                                reader.Read();
                                while (reader.TokenType == JsonToken.PropertyName)
                                {
                                    var mixin = entity[(string)reader.Value !];
Ejemplo n.º 3
0
        internal List <FrameworkElement> GetToolbarButtons(ModifiableEntity entity, EntityButtonContext ctx)
        {
            List <FrameworkElement> elements = new List <FrameworkElement>();

            if (GetButtonBarElementGlobal != null)
            {
                elements.AddRange(GetButtonBarElementGlobal.GetInvocationListTyped()
                                  .Select(d => d(entity, ctx))
                                  .NotNull().SelectMany(d => d).NotNull().ToList());
            }

            var getButtons = GetButtonBarElementByType.TryGetC(entity.GetType());

            if (getButtons != null)
            {
                elements.AddRange(getButtons.GetInvocationListTyped()
                                  .Select(d => d(entity, ctx))
                                  .NotNull().ToList());
            }

            if (ctx.MainControl is IHaveToolBarElements)
            {
                elements.AddRange(((IHaveToolBarElements)ctx.MainControl).GetToolBarElements(entity, ctx));
            }

            return(elements.OrderBy(Common.GetOrder).ToList());
        }
Ejemplo n.º 4
0
        protected internal virtual PartialViewResult PopupControl(ControllerBase controller, TypeContext typeContext, PopupOptionsBase popupOptions)
        {
            Type cleanType = typeContext.UntypedValue.GetType();

            ModifiableEntity entity = (ModifiableEntity)typeContext.UntypedValue;

            AssertViewableEntitySettings(entity);

            controller.ViewData.Model = typeContext;
            controller.ViewData[ViewDataKeys.PartialViewName] = popupOptions.PartialViewName ?? Navigator.OnPartialViewName(entity);
            typeContext.ViewOverrides = Navigator.EntitySettings(entity.GetType()).GetViewOverrides();

            bool isReadOnly = popupOptions.ReadOnly ?? Navigator.IsReadOnly(entity);

            if (isReadOnly)
            {
                typeContext.ReadOnly = true;
            }

            ViewMode mode = popupOptions.ViewMode;

            controller.ViewData[ViewDataKeys.ViewMode]       = mode;
            controller.ViewData[ViewDataKeys.ShowOperations] = popupOptions.ShowOperations;
            if (mode == ViewMode.View)
            {
                controller.ViewData[ViewDataKeys.RequiresSaveOperation] = ((PopupViewOptions)popupOptions).RequiresSaveOperation ?? EntityKindCache.RequiresSaveOperation(entity.GetType());
            }

            return(new PartialViewResult
            {
                ViewName = PopupControlView,
                ViewData = controller.ViewData,
                TempData = controller.TempData
            });
        }
Ejemplo n.º 5
0
 public IntegrityCheck(ModifiableEntity me, Dictionary <string, string> errors)
 {
     this.TemporalId = me.temporalId;
     this.Type       = me.GetType();
     this.Id         = me is Entity e ? e.id : null;
     Errors          = errors ?? throw new ArgumentNullException(nameof(errors));
 }
Ejemplo n.º 6
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (reader.TokenType == JsonToken.Null)
            {
                return(null);
            }

            using (EntityCache ec = new EntityCache())
            {
                reader.Assert(JsonToken.StartObject);

                ModifiableEntity mod = GetEntity(reader, objectType, existingValue, serializer, out bool markedAsModified);

                var pr = GetCurrentPropertyRoute(mod);

                var dic = PropertyConverter.GetPropertyConverters(mod.GetType());

                while (reader.TokenType == JsonToken.PropertyName)
                {
                    if ((string)reader.Value == "mixins")
                    {
                        var entity = (Entity)mod;
                        reader.Read();
                        reader.Assert(JsonToken.StartObject);

                        reader.Read();
                        while (reader.TokenType == JsonToken.PropertyName)
                        {
                            var mixin = entity[(string)reader.Value];

                            reader.Read();

                            using (JsonSerializerExtensions.SetCurrentPropertyRoute(pr.Add(mixin.GetType())))
                                serializer.DeserializeValue(reader, mixin.GetType(), mixin);

                            reader.Read();
                        }

                        reader.Assert(JsonToken.EndObject);
                        reader.Read();
                    }
                    else
                    {
                        PropertyConverter pc = dic.GetOrThrow((string)reader.Value);

                        reader.Read();
                        ReadJsonProperty(reader, serializer, mod, pc, pr, markedAsModified);

                        reader.Read();
                    }
                }

                reader.Assert(JsonToken.EndObject);

                AfterDeserilization.Invoke(mod);

                return(mod);
            }
        }
Ejemplo n.º 7
0
        private bool ValidateModifiableEntity(ValidationContext validationContext, ModifiableEntity mod)
        {
            bool          isValid       = true;
            PropertyScope propertyScope = new PropertyScope();

            validationContext.KeyBuilders.Push(propertyScope);

            var entity = mod as Entity;

            using (entity == null ? null : entity.Mixins.OfType <CorruptMixin>().Any(c => c.Corrupt) ? Corruption.AllowScope() : Corruption.DenyScope())
            {
                foreach (var kvp in PropertyConverter.GetPropertyConverters(mod.GetType()))
                {
                    if (kvp.Value.AvoidValidate)
                    {
                        continue;
                    }

                    propertyScope.PropertyName = kvp.Key;
                    if (SignumValidate(validationContext, kvp.Value.GetValue(mod)) ?? true)
                    {
                        isValid = false;
                    }

                    string error = kvp.Value.PropertyValidator.PropertyCheck(mod);

                    if (error != null)
                    {
                        string key = CalculateKey(validationContext);
                        if (validationContext.ModelState.IsValidField(key))
                        {
                            isValid = false;
                            validationContext.ModelState.AddModelError(key, error);
                        }
                    }
                }
            }

            if (entity != null && entity.Mixins.Any())
            {
                propertyScope.PropertyName = "mixins";
                PropertyScope mixinScope = new PropertyScope();
                validationContext.KeyBuilders.Push(mixinScope);
                foreach (var mixin in entity.Mixins)
                {
                    mixinScope.PropertyName = mixin.GetType().Name;
                    if (!ValidateModifiableEntity(validationContext, mixin))
                    {
                        isValid = false;
                    }
                }
                validationContext.KeyBuilders.Pop();
            }

            validationContext.KeyBuilders.Pop();
            return(isValid);
        }
Ejemplo n.º 8
0
        private bool ValidateModifiableEntity(ModifiableEntity mod)
        {
            using (Validator.ModelBinderScope())
            {
                bool isValid = true;

                var entity = mod as Entity;
                using (entity == null ? null : entity.Mixins.OfType <CorruptMixin>().Any(c => c.Corrupt) ? Corruption.AllowScope() : Corruption.DenyScope())
                {
                    foreach (var kvp in PropertyConverter.GetPropertyConverters(mod.GetType()))
                    {
                        if (kvp.Value.AvoidValidate)
                        {
                            continue;
                        }

                        string error = kvp.Value.PropertyValidator.PropertyCheck(mod);

                        if (error != null)
                        {
                            isValid = false;
                            ModelState.AddModelError(this.Key + "." + kvp.Key, error);
                        }

                        var val = kvp.Value.GetValue(mod);
                        if (this.CurrentPath.Push(val))
                        {
                            using (StateManager.Recurse(this, this.Key + "." + kvp.Key, null, val, null))
                            {
                                if (this.SignumValidate() == false)
                                {
                                    isValid = false;
                                }
                            }
                        }
                    }
                }

                if (entity != null && entity.Mixins.Any())
                {
                    foreach (var mixin in entity.Mixins)
                    {
                        if (this.CurrentPath.Push(mixin))
                        {
                            using (StateManager.Recurse(this, "mixins[" + mixin.GetType().Name + "].element", null, mixin, null))
                            {
                                isValid &= ValidateModifiableEntity(mixin);
                            }
                        }
                    }
                }

                return(isValid);
            }
        }
Ejemplo n.º 9
0
        public virtual (PropertyRoute pr, ModifiableEntity?mod) GetCurrentPropertyRoute(ModifiableEntity mod)
        {
            var tup = EntityJsonContext.CurrentPropertyRouteAndEntity;

            if (mod is IRootEntity re)
            {
                tup = (PropertyRoute.Root(mod.GetType()), mod);
            }
            if (tup == null)
            {
                var embedded = (EmbeddedEntity)mod;
                var route    = GetCurrentPropertyRouteEmbedded(embedded);
                return(route, embedded);
            }
            else if (tup.Value.pr.Type.ElementType() == mod.GetType())
            {
                tup = (tup.Value.pr.Add("Item"), null); //We have a custom MListConverter but not for other simple collections
            }
            return(tup.Value);
        }
Ejemplo n.º 10
0
 public void ParseData(ModifiableEntity context, QueryDescription description, SubTokensOptions options)
 {
     try
     {
         token = QueryUtils.Parse(TokenString, description, options);
     }
     catch (Exception e)
     {
         parseException = new FormatException("{0} {1}: {2}\r\n{3}".FormatWith(context.GetType().Name, (context as Entity)?.IdOrNull, context, e.Message), e);
     }
 }
Ejemplo n.º 11
0
        internal protected virtual EntitySettings AssertViewableEntitySettings(ModifiableEntity entity)
        {
            EntitySettings es = EntitySettings.TryGetC(entity.GetType());

            if (es == null)
            {
                throw new InvalidOperationException("No EntitySettings for type {0}".FormatWith(entity.GetType().Name));
            }

            if (!es.HasView())
            {
                throw new InvalidOperationException("No view has been set in the EntitySettings for {0}".FormatWith(entity.GetType().Name));
            }

            if (!IsViewableBase(entity.GetType(), entity))
            {
                throw new InvalidOperationException("Entities of type {0} are not viewable".FormatWith(entity.GetType().Name));
            }

            return(es);
        }
Ejemplo n.º 12
0
    internal static MixinEntity?CreateMixins(ModifiableEntity mainEntity)
    {
        var types = GetMixinDeclarations(mainEntity.GetType());

        MixinEntity?result = null;

        foreach (var t in types)
        {
            result = Constructors[t](mainEntity, result);
        }

        return(result);
    }
        private bool ValidateModifiableEntity(ValidationContext validationContext, ModifiableEntity mod)
        {
            bool isValid = true;
            PropertyScope propertyScope = new PropertyScope();
            validationContext.KeyBuilders.Push(propertyScope);

            var entity = mod as Entity;
            using (entity == null ? null : entity.Mixins.OfType<CorruptMixin>().Any(c => c.Corrupt) ? Corruption.AllowScope() : Corruption.DenyScope())
            {
                foreach (var kvp in PropertyConverter.GetPropertyConverters(mod.GetType()))
                {
                    if (kvp.Value.AvoidValidate)
                        continue;

                    propertyScope.PropertyName = kvp.Key;
                    if (SignumValidate(validationContext, kvp.Value.GetValue(mod)) ?? true)
                    {
                        isValid = false;
                    }

                    string error = kvp.Value.PropertyValidator.PropertyCheck(mod);

                    if (error != null)
                    {
                        string key = CalculateKey(validationContext);
                        if (validationContext.ModelState.IsValidField(key))
                        {
                            isValid = false;
                            validationContext.ModelState.AddModelError(key, error);
                        }
                    }
                }
            }
            
            if (entity != null && entity.Mixins.Any())
            {
                propertyScope.PropertyName = "mixins";
                PropertyScope mixinScope = new PropertyScope();
                validationContext.KeyBuilders.Push(mixinScope);
                foreach (var mixin in entity.Mixins)
                {
                    mixinScope.PropertyName = mixin.GetType().Name;
                    if (!ValidateModifiableEntity(validationContext, mixin))
                        isValid = false;
                }
                validationContext.KeyBuilders.Pop();
            }

            validationContext.KeyBuilders.Pop();
            return isValid;
        }
Ejemplo n.º 14
0
        public static List <ToolBarButton> GetForEntity(EntityButtonContext ctx, ModifiableEntity entity)
        {
            List <ToolBarButton> links = new List <ToolBarButton>();

            links.AddRange(globalButtons.SelectMany(a => a(ctx, entity) ?? Enumerable.Empty <ToolBarButton>()).NotNull());

            List <Delegate> list = entityButtons.TryGetC(entity.GetType());

            if (list != null)
            {
                links.AddRange(list.SelectMany(a => ((ToolBarButton[])a.DynamicInvoke(ctx, entity)) ?? Enumerable.Empty <ToolBarButton>()).NotNull());
            }

            return(links.OrderBy(a => a.Order).ToList());
        }
Ejemplo n.º 15
0
        string GetTitle(ModifiableEntity mod)
        {
            if (mod == null)
                return "";
            
            string niceName = mod.GetType().NiceName();

            IdentifiableEntity ident = mod as IdentifiableEntity;
            if (ident == null)
                return niceName;

            if (ident.IsNew)
            {
                return LiteMessage.New.NiceToString().ForGenderAndNumber(ident.GetType().GetGender()) + " " + niceName; 
            }
            return niceName + " " + ident.Id;
        }
Ejemplo n.º 16
0
        public override Control CreateView(ModifiableEntity entity, PropertyRoute typeContext)
        {
            if (View == null)
            {
                throw new InvalidOperationException("View not defined in EntitySettings");
            }

            if (typeContext == null && !(entity is IRootEntity))
            {
                throw new ArgumentException("An EmbeddedEntity neeed TypeContext");
            }

            Control control = View((T)entity);

            Common.SetPropertyRoute(control, typeContext ?? PropertyRoute.Root(entity.GetType()));

            return(control);
        }
Ejemplo n.º 17
0
        public static string?DynamicValidation(ModifiableEntity mod, PropertyInfo pi)
        {
            if (!initialized)
            {
                return(null);
            }

            var candidates = DynamicValidations.Value.TryGetC(mod.GetType()).EmptyIfNull()
                             .Where(pair => pair.Validation.Mixin <DisabledMixin>().IsDisabled == false)
                             .ToList();

            if (candidates.IsEmpty())
            {
                return(null);
            }

            foreach (var pair in candidates)
            {
                if (pair.PropertyRoute.MatchesEntity(mod) == true)
                {
                    var val = pair.Validation;

                    using (HeavyProfiler.LogNoStackTrace("DynamicValidation", () => val.Name))
                    {
                        try
                        {
                            string result = val.Eval.Algorithm.EvaluateUntyped(mod, pi);
                            if (result != null)
                            {
                                return(result);
                            }
                        }
                        catch (Exception e)
                        {
                            e.Data["DynamicValidation"] = val.Name;
                            throw e;
                        }
                    }
                }
            }

            return(null);
        }
Ejemplo n.º 18
0
        public static void PostConstructors_AddFilterProperties(ConstructorContext ctx, ModifiableEntity entity)
        {
            HttpContextBase httpContext = ctx.Controller.ControllerContext.HttpContext;

            if (!httpContext.Request.Params.AllKeys.Contains("webQueryName"))
            {
                return;
            }

            if (!(entity is Entity))
            {
                return;
            }

            object queryName = Finder.ResolveQueryName(httpContext.Request.Params["webQueryName"]);

            if (entity.GetType() != queryName as Type)
            {
                return;
            }

            QueryDescription queryDescription = DynamicQueryManager.Current.QueryDescription(queryName);

            var filters = FindOptionsModelBinder.ExtractFilterOptions(httpContext, queryDescription)
                          .Where(fo => fo.Operation == FilterOperation.EqualTo);

            var pairs = from pi in ctx.Type.GetProperties(BindingFlags.Public | BindingFlags.Instance)
                        join fo in filters on pi.Name equals fo.Token.Key
                        //where CanConvert(fo.Value, pi.PropertyType) && fo.Value != null
                        where fo.Value != null
                        select new { pi, fo };

            foreach (var p in pairs)
            {
                p.pi.SetValue(entity, Common.Convert(p.fo.Value, p.pi.PropertyType), null);
            }

            return;
        }
Ejemplo n.º 19
0
        public string GetTypeTitle(ModifiableEntity mod)
        {
            if (mod == null)
            {
                return("");
            }

            string niceName = mod.GetType().NiceName();

            Entity ident = mod as Entity;

            if (ident == null)
            {
                return(niceName);
            }

            if (ident.IsNew)
            {
                return(LiteMessage.New_G.NiceToString().ForGenderAndNumber(ident.GetType().GetGender()) + " " + niceName);
            }
            return(niceName + " " + ident.Id);
        }
Ejemplo n.º 20
0
        void TaskSetIconNormalWindow(NormalWindow nw, ModifiableEntity entity)
        {
            var icon = GetEntityIcon(entity.GetType(), true);

            nw.Icon = icon;
        }
Ejemplo n.º 21
0
 public static bool IsViewable(ModifiableEntity entity)
 {
     return(Manager.OnIsViewable(entity.GetType(), entity));
 }
Ejemplo n.º 22
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (reader.TokenType == JsonToken.Null)
            {
                return(null);
            }

            using (EntityCache ec = new EntityCache())
            {
                reader.Assert(JsonToken.StartObject);

                bool             markedAsModified;
                ModifiableEntity mod = GetEntity(reader, objectType, existingValue, serializer, out markedAsModified);

                var pr = JsonSerializerExtensions.CurrentPropertyRoute;
                if (pr == null || mod is IRootEntity)
                {
                    pr = PropertyRoute.Root(mod.GetType());
                }
                else if (pr.Type.ElementType() == objectType)
                {
                    pr = pr.Add("Item"); //Because we have a custom MListJsonConverter but not for other simpler collections
                }
                var dic = PropertyConverter.GetPropertyConverters(mod.GetType());

                while (reader.TokenType == JsonToken.PropertyName)
                {
                    if ((string)reader.Value == "mixins")
                    {
                        var entity = (Entity)mod;
                        reader.Read();
                        reader.Assert(JsonToken.StartObject);

                        reader.Read();
                        while (reader.TokenType == JsonToken.PropertyName)
                        {
                            var mixin = entity[(string)reader.Value];

                            reader.Read();

                            using (JsonSerializerExtensions.SetCurrentPropertyRoute(pr.Add(mixin.GetType())))
                                serializer.DeserializeValue(reader, mixin.GetType(), mixin);

                            reader.Read();
                        }

                        reader.Assert(JsonToken.EndObject);
                        reader.Read();
                    }
                    else
                    {
                        PropertyConverter pc = dic.GetOrThrow((string)reader.Value);

                        reader.Read();
                        ReadJsonProperty(reader, serializer, mod, pc, pr, markedAsModified);

                        reader.Read();
                    }
                }

                reader.Assert(JsonToken.EndObject);

                AfterDeserilization.Invoke(mod);

                return(mod);
            }
        }
Ejemplo n.º 23
0
 public static string OnPartialViewName(ModifiableEntity entity)
 {
     return(EntitySettings(entity.GetType()).OnPartialViewName(entity));
 }
        public JsonNetResult Validate(string rootType = null, string propertyRoute = null)
        {
            ModifiableEntity mod = this.UntypedExtractEntity();

            PropertyRoute route = (rootType.HasText() || propertyRoute.HasText()) ? PropertyRoute.Parse(TypeLogic.GetType(rootType), propertyRoute) : PropertyRoute.Root(mod.GetType());

            MappingContext context = mod.UntypedApplyChanges(this, route: route).UntypedValidate();

            IEntity ident    = context.UntypedValue as IEntity;
            string  newToStr = context.UntypedValue.ToString();

            return(context.ToJsonModelState(newToStr));
        }
Ejemplo n.º 25
0
        static async void Manager_TaskNormalWindow(NormalWindow normal, ModifiableEntity entity)
        {
            ButtonBar bar = normal.Child<ButtonBar>();

            var wrapPanel = (WrapPanel)bar.Content;
            bar.Content = null;

            HelpButton helpButton = new HelpButton
            {
                MainControl = normal,
                Margin = new Thickness(4),
                IsEnabled = false,
            }.Set(DockPanel.DockProperty, Dock.Right);

            bar.Content = new DockPanel
            {
                Children = 
                { 
                    helpButton,
                    wrapPanel
                }
            };

            helpButton.IsActive = await Server.ReturnAsync((IHelpServer s) => s.HasEntityHelpService(entity.GetType()));

            helpButton.Checked += async (sender, args) =>
            {
                var entityHelp = await Server.ReturnAsync((IHelpServer s) => s.GetEntityHelpService(entity.GetType()));

                SetHelpInfo(normal.Child<EntityTitle>(), entityHelp.Info);

                var properties = (from control in normal.Children<Control>(p => p.IsSet(Common.PropertyRouteProperty), HelpButton.WhereFlags)
                                  let propertyRoute = Common.GetPropertyRoute(control).SimplifyToPropertyOrRoot()
                                  where propertyRoute.PropertyRouteType != PropertyRouteType.Root
                                  select new { control, propertyRoute }).ToList();

                var external = properties.Extract(t => t.propertyRoute.RootType != entity.GetType());

                foreach (var t in properties)
                {
                    SetHelpInfo(t.control, entityHelp.Properties.GetOrThrow(t.propertyRoute));
                }

                var buttonBar = normal.Child<ButtonBar>();

                var operations = (from control in buttonBar.Children<ToolBarButton>(p => p.Tag is OperationInfo, HelpButton.WhereFlags)
                                  select new { control, operation = ((OperationInfo)control.Tag).OperationSymbol }).ToList();

                foreach (var t in operations)
                {
                    SetHelpInfo(t.control, entityHelp.Operations.GetOrThrow(t.operation));
                }

                var menuInfos = (from c in buttonBar.Children<ToolBarButton>(p => p.ContextMenu != null, HelpButton.WhereFlags)
                                 from mi in c.ContextMenu.Children<MenuItem>(p => p.Tag is OperationInfo, HelpButton.WhereFlags)
                                 select new { mi, operation = ((OperationInfo)mi.Tag).OperationSymbol }).ToList();

                foreach (var t in menuInfos)
                {
                    SetHelpInfo(t.mi, entityHelp.Operations.GetOrThrow(t.operation)); //ConstructFrom OperationInfo
                }

                if (external.Any())
                {
                    var externalRoutes = external.Select(a => a.propertyRoute).Distinct().ToList();

                    var dictionary = await Server.ReturnAsync((IHelpServer s) => s.GetPropertyRoutesService(externalRoutes));

                    foreach (var t in external)
                    {
                        SetHelpInfo(t.control, dictionary.GetOrThrow(t.propertyRoute));
                    }
                }
            }; 

            helpButton.IsEnabled = true;
        }
Ejemplo n.º 26
0
    protected virtual void SetParentEntity(ModifiableEntity p)
    {
        if (p != null && this.parentEntity != null && this.parentEntity != p)
        {
            throw new InvalidOperationException($"'{nameof(parentEntity)}' of '{this}'({this.GetType().TypeName()}) is still connected to '{parentEntity}'({parentEntity.GetType().TypeName()}), then can not be set to '{p}'({p.GetType().TypeName()})");
        }

        this.parentEntity = p;
    }
Ejemplo n.º 27
0
 public static bool IsViewable(ModifiableEntity entity, string partialViewName)
 {
     return(Manager.OnIsViewable(entity.GetType(), entity, partialViewName));
 }
Ejemplo n.º 28
0
 public static bool IsReadOnly(ModifiableEntity entity)
 {
     return(Manager.OnIsReadOnly(entity.GetType(), entity));
 }
Ejemplo n.º 29
0
 public static MappingContext UntypedApplyChanges(this ModifiableEntity entity, ControllerBase controller, string prefix = null, PropertyRoute route = null, SortedList <string, string> inputs = null)
 {
     return(miApplyChanges.GetInvoker(entity.GetType()).Invoke(entity, controller, prefix, route, inputs));
 }
Ejemplo n.º 30
0
        public override void WriteJson(JsonWriter writer, object?value, JsonSerializer serializer)
        {
            using (HeavyProfiler.LogNoStackTrace("WriteJson", () => value !.GetType().Name))
            {
                PropertyRoute pr = GetCurrentPropertyRoute(value !);

                ModifiableEntity mod = (ModifiableEntity)value !;

                writer.WriteStartObject();

                if (mod is Entity entity)
                {
                    writer.WritePropertyName("Type");
                    writer.WriteValue(TypeLogic.TryGetCleanName(mod.GetType()));

                    writer.WritePropertyName("id");
                    writer.WriteValue(entity.IdOrNull == null ? null : entity.Id.Object);

                    if (entity.IsNew)
                    {
                        writer.WritePropertyName("isNew");
                        writer.WriteValue(true);
                    }

                    if (Schema.Current.Table(entity.GetType()).Ticks != null)
                    {
                        writer.WritePropertyName("ticks");
                        writer.WriteValue(entity.Ticks.ToString());
                    }
                }
                else
                {
                    writer.WritePropertyName("Type");
                    writer.WriteValue(mod.GetType().Name);
                }

                if (!(mod is MixinEntity))
                {
                    writer.WritePropertyName("toStr");
                    writer.WriteValue(mod.ToString());
                }

                writer.WritePropertyName("modified");
                writer.WriteValue(mod.Modified == ModifiedState.Modified || mod.Modified == ModifiedState.SelfModified);

                foreach (var kvp in PropertyConverter.GetPropertyConverters(value !.GetType()))
                {
                    WriteJsonProperty(writer, serializer, mod, kvp.Key, kvp.Value, pr);
                }

                if (mod.Mixins.Any())
                {
                    writer.WritePropertyName("mixins");
                    writer.WriteStartObject();

                    foreach (var m in mod.Mixins)
                    {
                        var prm = pr.Add(m.GetType());

                        using (JsonSerializerExtensions.SetCurrentPropertyRoute(prm))
                        {
                            writer.WritePropertyName(m.GetType().Name);
                            serializer.Serialize(writer, m);
                        }
                    }

                    writer.WriteEndObject();
                }

                writer.WriteEndObject();
            }
        }
Ejemplo n.º 31
0
 public static TypeContext UntypedNew(ModifiableEntity entity, string prefix, PropertyRoute route)
 {
     return((TypeContext)Activator.CreateInstance(typeof(TypeContext <>).MakeGenericType(entity.GetType()), entity, (TypeContext)null, prefix, route));
 }
Ejemplo n.º 32
0
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            var pr = JsonSerializerExtensions.CurrentPropertyRoute;

            if (pr == null || typeof(IRootEntity).IsAssignableFrom(pr.Type))
            {
                pr = PropertyRoute.Root(value.GetType());
            }
            else if (pr.Type.ElementType() == value.GetType())
            {
                pr = pr.Add("Item");
            }

            ModifiableEntity mod = (ModifiableEntity)value;

            writer.WriteStartObject();

            var entity = mod as Entity;

            if (entity != null)
            {
                writer.WritePropertyName("Type");
                writer.WriteValue(TypeLogic.TryGetCleanName(mod.GetType()));

                writer.WritePropertyName("id");
                writer.WriteValue(entity.IdOrNull == null ? null : entity.Id.Object);

                if (entity.IsNew)
                {
                    writer.WritePropertyName("isNew");
                    writer.WriteValue(true);
                }

                if (Schema.Current.Table(entity.GetType()).Ticks != null)
                {
                    writer.WritePropertyName("ticks");
                    writer.WriteValue(entity.Ticks.ToString());
                }
            }
            else
            {
                writer.WritePropertyName("Type");
                writer.WriteValue(mod.GetType().Name);
            }

            if (!(mod is MixinEntity))
            {
                writer.WritePropertyName("toStr");
                writer.WriteValue(mod.ToString());
            }

            writer.WritePropertyName("modified");
            writer.WriteValue(mod.Modified == ModifiedState.Modified || mod.Modified == ModifiedState.SelfModified);

            foreach (var kvp in PropertyConverter.GetPropertyConverters(value.GetType()))
            {
                WriteJsonProperty(writer, serializer, mod, kvp.Key, kvp.Value, pr);
            }

            if (entity != null && entity.Mixins.Any())
            {
                writer.WritePropertyName("mixins");
                writer.WriteStartObject();

                foreach (var m in entity.Mixins)
                {
                    var prm = pr.Add(m.GetType());

                    using (JsonSerializerExtensions.SetCurrentPropertyRoute(prm))
                    {
                        writer.WritePropertyName(m.GetType().Name);
                        serializer.Serialize(writer, m);
                    }
                }

                writer.WriteEndObject();
            }

            writer.WriteEndObject();
        }
Ejemplo n.º 33
0
 public static bool IsNavigable(ModifiableEntity entity, string partialViewName, bool isSearch = false)
 {
     return(Manager.OnIsNavigable(entity.GetType(), entity, partialViewName, isSearch));
 }