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);
        }
예제 #2
0
        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);
        }
예제 #4
0
        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);
            }
        }
예제 #5
0
        public void Execute(Object sourceInstance, Object targetInstance, IPropertyMapSocket socket)
        {
            Object vs = Source.GetValue(sourceInstance, socket);

            Target.SetValue(targetInstance, vs, Source.property.PropertyType, socket);
        }
예제 #6
0
        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);
        }