/// <summary>
        /// Executes drag over
        /// </summary>
        /// <param name="param">The param.</param>
        private void DragOverFunc(object param)
        {
            TraceLab.UI.WPF.EventArgs.GraphDragEventArgs args = param as TraceLab.UI.WPF.EventArgs.GraphDragEventArgs;
            MetadataDefinition metadataDefinition             = args.DragArguments.Data.GetData("ComponentDefinition") as MetadataDefinition;

            args.DragArguments.Effects = System.Windows.DragDropEffects.None;
            if (metadataDefinition != null && IsExperimentRunning == false)
            {
                args.DragArguments.Effects = System.Windows.DragDropEffects.Copy;
            }
        }
        /// <summary>
        /// Executes drop
        /// </summary>
        /// <param name="param">The param.</param>
        private void DropFunc(object param)
        {
            if (IsExperimentRunning == false)
            {
                TraceLab.UI.WPF.EventArgs.GraphDragEventArgs args     = param as TraceLab.UI.WPF.EventArgs.GraphDragEventArgs;
                TraceLab.UI.WPF.EventArgs.DropLinkEventArgs  linkArgs = param as TraceLab.UI.WPF.EventArgs.DropLinkEventArgs;
                if (args != null)
                {
                    MetadataDefinition metadataDefinition = args.DragArguments.Data.GetData("ComponentDefinition") as MetadataDefinition;

                    if (metadataDefinition != null)
                    {
                        System.Windows.Point pos = args.Position;
                        AddComponentFromDefinition(metadataDefinition, pos.X, pos.Y);
                    }
                }
                else if (linkArgs != null)
                {
                    ExperimentNodeConnection edge = (ExperimentNodeConnection)linkArgs.ExistingEdge;

                    // If we're NOT removing an edge, OR the new edge will be different than the old edge.
                    if (linkArgs.ExistingEdge == null || (edge.Source == linkArgs.Source && edge.Target != linkArgs.Target))
                    {
                        if (linkArgs.ExistingEdge != null)
                        {
                            RemoveConnection(edge);
                        }

                        if (linkArgs.Source != null && linkArgs.Target != null)
                        {
                            AddConnection((ExperimentNode)linkArgs.Source, (ExperimentNode)linkArgs.Target);
                        }
                    }
                }
            }
        }