public virtual IThing SetThingByData(IGraph <IThing, ILink> graph, IThing thing, object data)
        {
            var itemToChange = graph.ThingToDisplay(thing);

            if (thing != null && itemToChange == thing && SchemaFacade.DescriptionableThing(thing))
            {
                itemToChange = ThingFactory.CreateItem(data);
                graph.Add(new Link(thing, itemToChange, CommonSchema.DescriptionMarker));
            }
            else
            {
                graph.DoChangeData(itemToChange, data);
            }
            return(itemToChange);
        }
        public override IVisual CreateSinkItem(IGraph <IThing, ILink> source,
                                               IGraph <IVisual, IVisualEdge> sink, IThing a)
        {
            var result = VisualFactory.CreateItem(ThingDataToDisplay(source, a));

            if (SchemaFacade.DescriptionableThing(a))
            {
                if (a is IThing <Stream> )
                {
                    result.Shape = ShapeFactory.Create <IBezierRectangleShape> ();
                }
                else
                {
                    result.Shape = ShapeFactory.Create <IRectangleShape> ();
                }
            }
            else
            {
                result.Shape = ShapeFactory.Create <IRoundedRectangleShape> ();
            }

            return(result);
        }