public static DirectedGraph MakeDirectedGraph(this IPropertyMapSocket propertyMapSocket) { DirectedGraph dgml = new DirectedGraph(); dgml.Populate <Type, PropertyInfo>(new Type[] { propertyMapSocket.FromType, propertyMapSocket.ToType }, x => x.GetProperties(BindingFlags.Instance | BindingFlags.Public), x => x.Name, x => x.Name, y => GetPropertyUID(y), y => y.Name, false, false); dgml.Link <PropertyMapLink>(propertyMapSocket.Links, x => GetPropertyUID(x.Source.property), x => GetPropertyUID(x.Target.property), x => x.Target.flags.ToString(), true); return(dgml); }
public Object GetValue(Object source, IPropertyMapSocket socket) { if (source == null) { return(null); } Object vl = property.GetValue(source, null); if (IsIList) { if (vl is IList vlist) { if (flags.HasFlag(PropertyMapLinkFlags.IListTransferAll)) { return(vlist.ConvertToList <Object>()); } else if (flags.HasFlag(PropertyMapLinkFlags.IListTransferFirst)) { return(vlist.getFirstSafe()); //.FirstOrDefault(); } else if (flags.HasFlag(PropertyMapLinkFlags.IListTransferLast)) { return(vlist.getLastSafe()); } } else { return(vl); } } else { return(property.GetValue(source, null)); } return(vl); }
public static List <PropertyMapLink> SetLinksFromGraph(this IPropertyMapSocket propertyMapSocket, DirectedGraph dgml) { List <PropertyMapLink> output = new List <PropertyMapLink>(); foreach (Link link in dgml.Links) { String sourcePropertyName = GetPropertyNameFromUID(link.Source); String targetPropertyName = GetPropertyNameFromUID(link.Target); if (!(sourcePropertyName.isNullOrEmpty() || targetPropertyName.isNullOrEmpty())) { // log.log("Link [" + sourcePropertyName + "] to [" + targetPropertyName + "]"); var mapLink = propertyMapSocket.AddLink(sourcePropertyName, targetPropertyName); if (mapLink != null) { output.Add(mapLink); } } // var p1 = link.Source.Replace(map2.FromType.Name, ""); // var p2 = link.Source.Replace(map2.ToType.Name, ""); } return(output); }
public void SetValue(Object target, Object vl, Type vl_type, IPropertyMapSocket socket) { if (target == null) { return; } Object t_vl = property.GetValue(target, null); IList t_list = t_vl as IList; if (t_list != null) { if (vl is IList vlist) { if (flags.HasFlag(PropertyMapLinkFlags.IListTransferAll)) { foreach (var v in vlist) { if (!t_list.Contains(v) || !flags.HasFlag(PropertyMapLinkFlags.IListUnique)) { t_list.Add(v); } } } else if (flags.HasFlag(PropertyMapLinkFlags.IListTransferFirst)) { var v = vlist.getFirstSafe(); if (!t_list.Contains(v) || !flags.HasFlag(PropertyMapLinkFlags.IListUnique)) { t_list.Add(v); } } else if (flags.HasFlag(PropertyMapLinkFlags.IListTransferLast)) { var v = vlist.getLastSafe(); if (!t_list.Contains(v) || !flags.HasFlag(PropertyMapLinkFlags.IListUnique)) { t_list.Add(v); } } } } else { if (flags.HasFlag(PropertyMapLinkFlags.IgnoreNullOrEmptyValues) && vl.isNullOrEmpty()) { return; } if (flags.HasFlag(PropertyMapLinkFlags.IgnoreDefaultValues) && DefaultValueSet && vl.Equals(DefaultValue)) { return; } if (flags.HasFlag(PropertyMapLinkFlags.SkipNonDefaultValueOverwrite) && !t_vl.Equals(DefaultValue)) { return; } if (property.PropertyType != vl_type) { vl = socket.Converter.ConvertValueFor(vl, property); } property.SetValue(target, vl, null); } }
public void Execute(Object sourceInstance, Object targetInstance, IPropertyMapSocket socket) { Object vs = Source.GetValue(sourceInstance, socket); Target.SetValue(targetInstance, vs, Source.property.PropertyType, socket); }
public static PropertyMapLink Create(PropertyInfo source, PropertyInfo target, IPropertyMapSocket socket, PropertyMapLinkFlags flags = PropertyMapLinkFlags.none) { if (!target.CanWrite) { return(null); } if (!source.CanRead) { return(null); } if (!target.GetIndexParameters().isNullOrEmpty()) { return(null); } if (!source.GetIndexParameters().isNullOrEmpty()) { return(null); } if (flags == PropertyMapLinkFlags.none) { flags = socket.GeneralLinkOptions; } PropertyMapLink output = new PropertyMapLink(); output.Source = new PropertyMapEndpoint(source, flags, socket.FromDefaultInstance); output.Target = new PropertyMapEndpoint(target, flags, socket.ToDefaultInstance); return(output); }