Ejemplo n.º 1
0
        public DataEntityListProperty(DataEntityListPropertyDef propertyDef, ObjDefs e)
            : base(propertyDef, propertyDef.Name, typeof(T), propertyDef.getter, propertyDef.setter, propertyDef.DotNetPropertyType)

        {
            this.GetF  = MakeGetter(propertyDef.getter, e, this);
            this.GetQF = MakeQGetter(propertyDef.getter, e, this);
            this.SetF  = MakeSetter(propertyDef.setter, e, this, propertyDef.DotNetPropertyType, propertyDef.PropertyType);
        }
Ejemplo n.º 2
0
        public DataEntityProperty(DataEntityPropertyDef deFirstPass, ObjDefs e)
            : base(deFirstPass, deFirstPass.Name, typeof(T), deFirstPass.getter, deFirstPass.setter)

        {
            this.GetQF = MakeQGetter(deFirstPass.getter, e, this);
            this.GetF  = MakeGetter(deFirstPass.getter, e, this);
            this.SetF  = MakeSetter(deFirstPass.setter, e, this, deFirstPass.PropertyType);
        }
Ejemplo n.º 3
0
        public static T From <T>(DataEntity de, ObjDefs e, string deType) where T : new()
        {
            var data = new T();
            var od   = e.GetOrBuild(deType);

            foreach (var property in de.Properties)
            {
                var propertySetter = od.Properties[property.Key];
                propertySetter?.Set(data, property.Value);
            }

            foreach (var c in de.Children)
            {
                var dataEntityProp = od.Properties[c.Key] as IDataEntityProperty;
                if (dataEntityProp != null)
                {
                    var dataEntity = c.Value.FirstOrDefault();

                    if (dataEntity != null)
                    {
                        dataEntityProp.Set(data, dataEntity);
                    }
                }

                var dataEntityListProp = od.Properties[c.Key] as IDataEntityListProperty;
                if (dataEntityListProp != null)
                {
                    var dataEntity = c.Value;

                    if (dataEntity != null)
                    {
                        dataEntityListProp.Set(data, dataEntity);
                    }
                }
            }

            return(data);
        }
Ejemplo n.º 4
0
 private static Func <object, QueryEntity, DataEntity> MakeQGetter(Func <object, object> getValue, ObjDefs objDefHeader, ISettablePropertyDef context)
 {
     return((target, qe) =>
     {
         if (target == null)
         {
             ThrowHelper.ThrowGetterTargetNull(context);
         }
         var val = getValue(target);
         if (val == null)
         {
             return null;
         }
         var de = ObjDefConverter.To((T)val, objDefHeader, qe);
         return de;
     });
 }
Ejemplo n.º 5
0
 private static Action <object, DataEntity> MakeSetter(Action <object, object> setValue, ObjDefs objDefHeaders, ISettablePropertyDef context, string objDefName)
 {
     return((target, val) =>
     {
         if (target == null)
         {
             ThrowHelper.ThrowSetterTargetNull(context);
         }
         var tVal = ObjDefConverter.From <T>(val, objDefHeaders, objDefName);
         setValue(target, tVal);
     });
 }
Ejemplo n.º 6
0
 private static Func <object, QueryEntity, List <DataEntity> > MakeQGetter(Func <object, object> getValue, ObjDefs objDefHeader, ISettablePropertyDef context)
 {
     return((target, qe) =>
     {
         if (target == null)
         {
             ThrowHelper.ThrowGetterTargetNull(context);
         }
         var val = getValue(target);
         if (val == null)
         {
             return null;
         }
         var ie = val as IEnumerable <T>;
         var des = ie.Select(x => ObjDefConverter.To(x, objDefHeader, qe));
         return des.ToList();
     });
 }
Ejemplo n.º 7
0
        private static Action <object, IEnumerable <DataEntity> > MakeSetter(Action <object, object> setValue, ObjDefs objDefHeader, ISettablePropertyDef context, Type targetType, string deType)
        {
            return((target, val) =>
            {
                if (target == null)
                {
                    ThrowHelper.ThrowSetterTargetNull(context);
                }
                if (val == null)
                {
                    setValue(target, null);
                    return;
                }
                var tVal = val.Select(x => ObjDefConverter.From <T>(x, objDefHeader, deType));

                if (targetType.IsArray)
                {
                    setValue(target, tVal.ToArray());
                    return;
                }

                if (targetType.GetGenericTypeDefinition() == typeof(List <>))
                {
                    setValue(target, tVal.ToList());
                    return;
                }

                setValue(target, tVal);
                return;
            });
        }
Ejemplo n.º 8
0
 public static T From <T>(DataEntity de, ObjDefs e) where T : new()
 {
     return(From <T>(de, e, de.ObjectDefinitionFullName));
 }
Ejemplo n.º 9
0
 public static IFullProp CreateDEList <T>(DataEntityListPropertyDef d, ObjDefs e)
     where T : new()
 {
     return(new DataEntityListProperty <T>(d, e));
 }
Ejemplo n.º 10
0
        //public static T From<T>(DataEntity de, ObjDefs e) where T : new()
        //{
        //    var data = new T();
        //    // TODO: Consider getting this from the type instead of DataEntity
        //    var od = e.GetOrBuild(de.ObjectDefinitionFullName);
        //    foreach (var property in de.Properties)
        //    {
        //        var propertySetter = od.Properties[property.Key];
        //        propertySetter?.Set(data, property.Value);
        //    }

        //    foreach (var c in de.Children)
        //    {
        //        var dataEntityProp = od.Properties[c.Key] as IDataEntityProperty;
        //        if (dataEntityProp != null)
        //        {
        //            var dataEntity = c.Value.FirstOrDefault();

        //            if (dataEntity != null)
        //            {
        //                dataEntityProp.Set(data, dataEntity);
        //            }
        //        }

        //        var dataEntityListProp = od.Properties[c.Key] as IDataEntityListProperty;
        //        if (dataEntityListProp != null)
        //        {
        //            var dataEntity = c.Value;

        //            if (dataEntity != null)
        //            {
        //                dataEntityListProp.Set(data, dataEntity);
        //            }
        //        }

        //    }

        //    return data;
        //}

        public static DataEntity To <T>(T data, ObjDefs e, QueryEntity qe = null)
        {
            if (data == null)
            {
                return(null);
            }
            var stub     = MetadataReflector.GetObjectDefStubFromType(typeof(T));
            var od       = e.GetOrBuild(stub.Name);
            var de       = new DataEntity(od.Name);
            var props    = new EntityProperties();
            var children = new EntityChildren();

            foreach (var keyValuePair in od.Properties)
            {
                var name   = keyValuePair.Key;
                var getter = keyValuePair.Value;
                if (!getter.IsObjectDefProp)
                {
                    if (qe == null || qe.PropertyList.Contains(name))
                    {
                        props.Add(name, getter.Get(data));
                    }
                }
                else
                {
                    var dataEntityGetter = getter as IDataEntityProperty;
                    if (dataEntityGetter != null)
                    {
                        if (qe == null)
                        {
                            var cde = dataEntityGetter.Get(data);
                            var v   = cde == null ? new List <DataEntity>() : new List <DataEntity> {
                                cde
                            };
                            children.Add(name, v);
                        }
                        else
                        {
                            var propQe = qe.ChildList.FirstOrDefault(q => q.Name == name);
                            if (propQe != null)
                            {
                                var cde = dataEntityGetter.Get(data, propQe);
                                var v   = cde == null ? new List <DataEntity>() : new List <DataEntity> {
                                    cde
                                };
                                children.Add(name, v);
                            }
                        }
                    }

                    var dataEntityListGetter = getter as IDataEntityListProperty;
                    if (dataEntityListGetter != null)
                    {
                        if (qe == null)
                        {
                            var cde = dataEntityListGetter.Get(data);

                            // Workaround fopr CORE Bug
                            if (cde == null)
                            {
                                cde = new List <DataEntity>();
                            }
                            children.Add(name, cde);
                        }
                        else
                        {
                            var propQe = qe.ChildList.FirstOrDefault(q => q.Name == name);
                            if (propQe != null)
                            {
                                var cde = dataEntityListGetter.Get(data, propQe);
                                // Workaround fopr CORE Bug
                                if (cde == null)
                                {
                                    cde = new List <DataEntity>();
                                }
                                children.Add(name, cde);
                            }
                        }
                    }
                }
            }

            de.Properties = props;
            de.Children   = children;
            return(de);
        }