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); }
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); }
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); }
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; }); }
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); }); }
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(); }); }
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; }); }
public static T From <T>(DataEntity de, ObjDefs e) where T : new() { return(From <T>(de, e, de.ObjectDefinitionFullName)); }
public static IFullProp CreateDEList <T>(DataEntityListPropertyDef d, ObjDefs e) where T : new() { return(new DataEntityListProperty <T>(d, e)); }
//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); }