Example #1
0
        public static void Copy(ApplicationContext applicationContext, BaseExperiment originalExperiment)
        {
            clipboardComponentGraph = CompositeComponentGraph.ConstructGraphFromSelectedNodes(originalExperiment);

            foreach (ExperimentNode node in clipboardComponentGraph.Vertices)
            {
                node.IsSelected = false;
            }

            BasicNodeControl componentControl;

            foreach (ExperimentNode originalNode in originalExperiment.Vertices)
            {
                foreach (ExperimentNode node in clipboardComponentGraph.Vertices)
                {
                    if (originalNode.ID.Equals(node.ID))
                    {
                        if (applicationContext.NodeControlFactory.TryGetNodeControl(originalNode, out componentControl))
                        {
                            node.Data.X = componentControl.DisplayBox.X;
                            node.Data.Y = componentControl.DisplayBox.Y;
                        }
                    }
                }
            }
        }
Example #2
0
        public static void Paste(BaseExperiment targetExperiment, double x, double y)
        {

            if (clipboardComponentGraph == null)
                return;

            targetExperiment.CopyAndAdd (clipboardComponentGraph, x, y);
        }
Example #3
0
        public static void Paste(ApplicationContext applicationContext, BaseExperiment targetExperiment, double x, double y)
        {
            if (clipboardComponentGraph == null)
            {
                return;
            }

            targetExperiment.CopyAndAdd(clipboardComponentGraph, x, y);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="CompositeComponentGraph"/> class
        /// without reference to any node. 
        /// </summary>
        /// <param name="componentGraph">The component graph.</param>
        public CompositeComponentGraph(BaseExperiment componentGraph) : base()
        {
            if (componentGraph == null)
            {
                throw new ArgumentException("Component graph cannot be null");
            }

            CopyFrom(componentGraph);
            OwnerNode = null; //does not belong to any node
        }
 // HERZUM SPRINT 3.1 TLAB-180
 private void ConstructGraphFromSelectedScopeNodes(BaseExperiment experiment)
 {
     if (experiment == null)
         return;
     CompositeComponentGraph.CopyAndAdd (CompositeComponentGraph.ConstructGraphFromSelectedNodes (experiment), 200.0, 200.0);  
     foreach (ExperimentNode node in experiment.Vertices) 
         if (!node.IsSelected){
             ScopeBaseMetadata scopeBaseMetadata = node.Data.Metadata as ScopeBaseMetadata;
             if (scopeBaseMetadata!= null && scopeBaseMetadata.ComponentGraph!=null)
                 ConstructGraphFromSelectedScopeNodes(scopeBaseMetadata.ComponentGraph);
         }
 }
Example #6
0
        public static void Copy(BaseExperiment originalExperiment)
        {
            // HERZUM SPRINT 4: TLAB-215
            if (clipboardComponentGraph != null)
                clipboardComponentGraph.Clear ();
            // END HERZUM SPRINT 4: TLAB-215

            clipboardComponentGraph = CompositeComponentGraph.ConstructGraphFromSelectedNodes (originalExperiment);

            foreach (ExperimentNode node in clipboardComponentGraph.Vertices)
                node.IsSelected = false;

        }
Example #7
0
        /*
         * private ScopeNodeBase GetScopeUp(ExperimentNode experimentNode, BaseExperiment experiment, double x, double y){
         *  BasicNodeControl componentControl;
         *  ScopeNodeBase scopeUp = null;
         *  ExperimentCanvasPad pad = null;
         *  if (experiment == null)
         *      return null;
         *  foreach (ExperimentNode node in experiment.Vertices)
         *      if (node is ScopeNodeBase && !node.Equals(experimentNode))
         *          if(m_applicationContext.NodeControlFactory.TryGetNodeControl(node, out componentControl)){
         *              ScopeBaseMetadata  scopeBaseMetadata  = node.Data.Metadata as ScopeBaseMetadata;
         *              int xMouse = 0;
         *              int yMouse = 0;
         *              BasicNodeControl internalComponentControl = null;
         *              foreach (ExperimentNode internalNode in scopeBaseMetadata.ComponentGraph.Vertices){
         *                  m_applicationContext.NodeControlFactory.TryGetNodeControl(internalNode, out internalComponentControl) ;
         *                  break;
         *              }
         *              if (internalComponentControl == null)
         *                  return null;
         *                  pad = ExperimentCanvasPadFactory.GetExperimentCanvasPad (m_applicationContext, componentControl);
         *              if (pad == null)
         *                  return null;
         *              pad.ExperimentCanvasWidget.GetPointer(out xMouse, out yMouse);
         *              scopeUp = GetScopeUp(experimentNode, scopeBaseMetadata.ComponentGraph as BaseExperiment, xMouse, yMouse);
         *              if (scopeUp != null)
         *                  return scopeUp;
         *              ScopeNodeControl scopeNodeControl = componentControl as ScopeNodeControl;
         *              if (scopeNodeControl.ContainsPoint (x, y))
         *                  return node as ScopeNodeBase;
         *          }
         *  return null;
         * }
         */
        // END HERZUM SPRINT 2.3 TLAB-60


        public override ITool CreateFigureTool(IPrimaryToolDelegator mainTool, IDrawingEditor editor,
                                               ITool defaultTool, MouseEvent ev)
        {
            DragTool dragTool = defaultTool as DragTool;

            if (dragTool != null)
            {
                //when drag is completed update model data
                dragTool.DragCompleted += (object sender, EventArgs e) =>
                {
                    this.ExperimentNode.Data.X = this.DisplayBox.X;
                    this.ExperimentNode.Data.Y = this.DisplayBox.Y;

                    // HERZUM SPRINT 2.3 TLAB-60
                    int           xMouse    = 0;
                    int           yMouse    = 0;
                    ScopeNodeBase scopeNode = GetScopeUp(ExperimentNode, ExperimentNode.Owner as BaseExperiment, ExperimentNode.Data.X, ExperimentNode.Data.Y);
                    if (scopeNode != null)
                    {
                        ScopeBaseMetadata   scopeBaseMetadata = scopeNode.Data.Metadata as ScopeBaseMetadata;
                        BaseExperiment      experimentTarget  = scopeBaseMetadata.ComponentGraph;
                        BasicNodeControl    componentControl  = null;
                        ExperimentCanvasPad pad = null;
                        foreach (ExperimentNode node in scopeBaseMetadata.ComponentGraph.Vertices)
                        {
                            m_applicationContext.NodeControlFactory.TryGetNodeControl(node, out componentControl);
                            break;
                        }
                        if (componentControl != null)
                        {
                            pad = ExperimentCanvasPadFactory.GetExperimentCanvasPad(m_applicationContext, componentControl);
                        }

                        if (pad != null)
                        {
                            pad.ExperimentCanvasWidget.GetPointer(out xMouse, out yMouse);
                            // HERZUM SPRINT 2.4 TLAB-56 TLAB-57 TLAB-58 TLAB-59 CLASS
                            //TraceLab.Core.Experiments.Clipboard.Cut(ExperimentNode.Owner as BaseExperiment);
                            //TraceLab.Core.Experiments.Clipboard.Paste(experimentTarget,xMouse,yMouse);

                            DragClipboard.Cut(m_applicationContext, ExperimentNode.Owner as BaseExperiment);
                            DragClipboard.Paste(m_applicationContext, experimentTarget, xMouse, yMouse);
                            // END HERZUM SPRINT 2.4 TLAB-56 TLAB-57 TLAB-58 TLAB-59 CLASS
                            pad.DisplayAddedSubgraph(experimentTarget);
                        }
                    }
                    // END HERZUM SPRINT 2.3 TLAB-60
                };
            }
            return(base.CreateFigureTool(mainTool, editor, defaultTool, ev));
        }
Example #8
0
        public static void Copy(ApplicationContext applicationContext, BaseExperiment originalExperiment)
        {
            clipboardComponentGraph = CompositeComponentGraph.ConstructGraphFromSelectedNodes (originalExperiment);

            foreach (ExperimentNode node in clipboardComponentGraph.Vertices)
                node.IsSelected = false;

            BasicNodeControl componentControl;
            foreach (ExperimentNode originalNode in originalExperiment.Vertices)
                foreach (ExperimentNode node in clipboardComponentGraph.Vertices)
                    if (originalNode.ID.Equals(node.ID))
                        if(applicationContext.NodeControlFactory.TryGetNodeControl(originalNode, out componentControl)) {
                        node.Data.X = componentControl.DisplayBox.X;
                        node.Data.Y = componentControl.DisplayBox.Y;
                    }
        }
Example #9
0
        // HERZUM SPRINT 2.3 TLAB-60
        private ScopeNodeBase GetScopeUp(ExperimentNode experimentNode, BaseExperiment experiment, double x, double y)
        {
            BasicNodeControl componentControl;

            foreach (ExperimentNode node in experiment.Vertices)
            {
                if (node is ScopeNodeBase && !node.Equals(experimentNode))
                {
                    if (m_applicationContext.NodeControlFactory.TryGetNodeControl(node, out componentControl))
                    {
                        ScopeNodeControl scopeNodeControl = componentControl as ScopeNodeControl;
                        if (scopeNodeControl.ContainsPoint(x, y))
                        {
                            return(node as ScopeNodeBase);
                        }
                    }
                }
            }
            return(null);
        }
Example #10
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ExperimentViewModel"/> class.
        /// </summary>
        /// <param name="experiment">The experiment that this ViewModel represents.  This is intentionally NOT the interface</param>
        public ExperimentViewModel(BaseExperiment experiment)
        {
            if (experiment == null)
            {
                throw new ArgumentNullException("experiment");
            }

            //determine if experiment is editable
            IEditableExperiment editableExperiment = experiment as IEditableExperiment;

            if (editableExperiment != null)
            {
                m_topLevel = new TopLevelEditableExperimentViewModel(editableExperiment);
            }
            else
            {
                m_topLevel = new TopLevelExperimentViewModel(experiment);
            }

            m_currentView = m_topLevel;

            OpenComponentGraph     = new DelegateCommand(OpenComponentGraphFunc, CanOpenComponentGraph);
            RunExperiment          = new DelegateCommand(RunExperimentFunc, CanRunExperimentFunc);
            StopExperiment         = new DelegateCommand(StopExperimentFunc, CanStopExperimentFunc);
            AboutExperimentCommand = new DelegateCommand(DoAboutExperiment);
            PackExperiment         = new DelegateCommand(PackExperimentFunc);

            //top level does not have parent id
            AddSubLevels(String.Empty, m_topLevel);

            experiment.NodeAdded   += OnNodeAdded;
            experiment.NodeRemoved += OnNodeRemoved;

            experiment.NodeFinished += OnNodeFinished;
            experiment.NodeHasError += OnNodeHasError;

            experiment.ExperimentStarted   += OnExperimentStarted;
            experiment.ExperimentCompleted += OnExperimentCompleted;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ExperimentViewModel"/> class.
        /// </summary>
        /// <param name="experiment">The experiment that this ViewModel represents.  This is intentionally NOT the interface</param>
        public ExperimentViewModel(BaseExperiment experiment)
        {
            if (experiment == null)
                throw new ArgumentNullException("experiment");
        
            //determine if experiment is editable
            IEditableExperiment editableExperiment = experiment as IEditableExperiment;
            if (editableExperiment != null)
            {
                m_topLevel = new TopLevelEditableExperimentViewModel(editableExperiment);
            }
            else
            {
                m_topLevel = new TopLevelExperimentViewModel(experiment);
            }

            m_currentView = m_topLevel;
            
            OpenComponentGraph = new DelegateCommand(OpenComponentGraphFunc, CanOpenComponentGraph);
            RunExperiment = new DelegateCommand(RunExperimentFunc, CanRunExperimentFunc);
            StopExperiment = new DelegateCommand(StopExperimentFunc, CanStopExperimentFunc);
            AboutExperimentCommand = new DelegateCommand(DoAboutExperiment);
            PackExperiment = new DelegateCommand(PackExperimentFunc);

            //top level does not have parent id
            AddSubLevels(String.Empty, m_topLevel);

            experiment.NodeAdded += OnNodeAdded;
            experiment.NodeRemoved += OnNodeRemoved;

            experiment.NodeFinished += OnNodeFinished;
            experiment.NodeHasError += OnNodeHasError;

            experiment.ExperimentStarted += OnExperimentStarted;
            experiment.ExperimentCompleted += OnExperimentCompleted;
        }
Example #12
0
 public static void Cut(ApplicationContext applicationContext, BaseExperiment originalExperiment)
 {
     Copy(applicationContext, originalExperiment);
     CutSelectedNodes(originalExperiment);
 }
 /// <summary>
 /// Selects the decision and its scopes connected to the given exit node
 /// </summary>
 /// <param name="originalExperiment">The original experiment.</param>
 /// <param name="node">The exit decision node.</param>
 private static void SelectDecisionsScopesConnectedToExitNode(BaseExperiment originalExperiment, ExperimentNode exitDecisionNode)
 {
     //iterate throught all outcoming edges and delete successor nodes
     IEnumerable<ExperimentNodeConnection> edges;
     if (originalExperiment.TryGetInEdges(exitDecisionNode, out edges))
     {
         //iterate over the copy of edges, as edges itself are going to be delete when nodes are deleted
         foreach (ExperimentNodeConnection edge in new List<ExperimentNodeConnection>(edges))
         {
             //check if target is scope or exit, as there are might be old Decision nodes from old experiments
             //that do not have fixed connections to scopes
             if (edge.Source is ScopeNode || edge.Source is ExperimentDecisionNode)
             {
                 if (!edge.Source.IsSelected)
                     edge.Source.IsSelected = true;
             }
         }
     }
 }
 /// <summary>
 /// Assures that all decision are selected with their scopes.
 /// If decision has been partially selected, meaning only decision with not all scopes was selected,
 /// or only some scopes were selected without decision node, this method will select all nodes
 /// to assure completeness of selection.
 /// </summary>
 /// <param name="originalExperiment">The original experiment.</param>
 private static void AssureCompleteDecisionSelection(BaseExperiment originalExperiment)
 {
     foreach (ExperimentNode node in originalExperiment.Vertices)
     {
         if (node.IsSelected)
         {
             //case 1. node is ExperimentDecisionNode
             if (node is ExperimentDecisionNode)
             {
                 SelectDecisionsScopes(originalExperiment, node);
             }
             else if (node is ExitDecisionNode)
             {
                 SelectDecisionsScopesConnectedToExitNode(originalExperiment, node);
             }
             else
             {
                 //case 2. node is a scope node
                 ScopeNode scopeNode = node as ScopeNode;
                 if (scopeNode != null)
                 {
                     if (!scopeNode.DecisionNode.IsSelected)
                     {
                         scopeNode.DecisionNode.IsSelected = true;
                         SelectDecisionsScopes(originalExperiment, scopeNode.DecisionNode);
                     }
                 }
             }
         }
     }
 }
        /// <summary>
        /// Constructs the graph from selected nodes of the given experiment graph.
        /// </summary>
        /// <param name="graph">The graph.</param>
        /// <returns></returns>
        public static CompositeComponentGraph ConstructGraphFromSelectedNodes(BaseExperiment originalExperiment)
        {
            var compositeComponentGraph = new CompositeComponentGraph();

            // Clone experiment info.
            compositeComponentGraph.ExperimentInfo = new ExperimentInfo();

            AssureCompleteDecisionSelection(originalExperiment);

            //keep lookup from original node to its clone for later edge reproduction
            Dictionary<ExperimentNode, ExperimentNode> clonedNodeLookup = new Dictionary<ExperimentNode, ExperimentNode>();

            // Clone vertices that are selected and add them to the composite component graph
            foreach (ExperimentNode node in originalExperiment.Vertices)
            {
                if (node.IsSelected)
                {
                    var clonedNode = node.Clone();
                    clonedNodeLookup[node] = clonedNode;
                    compositeComponentGraph.SetLogLevelSettings(clonedNode, compositeComponentGraph.Settings);
                    compositeComponentGraph.AddVertex(clonedNode);

                    if (clonedNode.ID == "Start" && compositeComponentGraph.StartNode == null)
                    {
                        compositeComponentGraph.StartNode = (ExperimentStartNode)clonedNode;
                    }
                    else if (clonedNode.ID == "End" && compositeComponentGraph.EndNode == null)
                    {
                        compositeComponentGraph.EndNode = (ExperimentEndNode)clonedNode;
                    }
                }
            }

            // Clone edges
            foreach (ExperimentNodeConnection connection in originalExperiment.Edges)
            {
                ExperimentNode cloneSourceNode, cloneTargetNode;

                //add edges only if both source and target nodes has been found in clones lookup
                bool foundSourceNode = clonedNodeLookup.TryGetValue(connection.Source, out cloneSourceNode);
                bool foundTargetNode = clonedNodeLookup.TryGetValue(connection.Target, out cloneTargetNode);
                if (foundSourceNode && foundTargetNode)
                {
                    ExperimentNodeConnection clonedConnection = new ExperimentNodeConnection(connection.ID, cloneSourceNode, cloneTargetNode, connection.IsFixed, connection.IsVisible);
                    //copy also all route points
                    clonedConnection.RoutePoints.CopyPointsFrom(connection.RoutePoints);

                    compositeComponentGraph.AddEdge(clonedConnection);

                    //perform fixes for scopes 
                    ScopeNodeHelper.TryFixScopeDecisionEntryAndExitNodes(cloneSourceNode, cloneTargetNode);
                }
            }

            ConnectNodesToStartAndEndNode(compositeComponentGraph);

            //move graph closer to the origin point
            TraceLab.Core.Utilities.ExperimentHelper.MoveGraphCloserToOriginPoint(compositeComponentGraph, 200, 200);
                        
            if (originalExperiment.References != null)
            {
                if (!TraceLabSDK.RuntimeInfo.IsRunInMono)
                {
                    compositeComponentGraph.References = new ObservableCollection<TraceLabSDK.PackageSystem.IPackageReference>(originalExperiment.References);
                }
                else
                {
                    // Mono currently has not implemented constructor of ObservableCollection(IEnumerable<T> collection)
                    // thus we have to add references manually
                    compositeComponentGraph.References = new ObservableCollection<TraceLabSDK.PackageSystem.IPackageReference>();
                    foreach (TraceLabSDK.PackageSystem.IPackageReference reference in originalExperiment.References)
                    {
                        compositeComponentGraph.References.Add(reference);
                    }
                }
            }

            compositeComponentGraph.OwnerNode = null;

            return compositeComponentGraph;
        }
Example #16
0
 // HERZUM SPRINT 2.3 TLAB-60
 private ScopeNodeBase GetScopeUp(ExperimentNode experimentNode, BaseExperiment experiment, double x, double y){
     BasicNodeControl componentControl;
     foreach (ExperimentNode node in experiment.Vertices)
         if (node is ScopeNodeBase && !node.Equals(experimentNode))
             if(m_applicationContext.NodeControlFactory.TryGetNodeControl(node, out componentControl)){                       
                 ScopeNodeControl scopeNodeControl = componentControl as ScopeNodeControl;
                 if (scopeNodeControl.ContainsPoint (x, y))
                     return node as ScopeNodeBase;
             }
     return null;
 }
Example #17
0
 public static void Cut(BaseExperiment originalExperiment)
 {
     Copy (originalExperiment);
     CutSelectedNodes (originalExperiment);
 }
Example #18
0
 private static void CutSelectedNodes(BaseExperiment originalExperiment)
 {
     originalExperiment.RemoveSelectedVertices ();
 }
Example #19
0
 public static void CutSelectedNodes(BaseExperiment originalExperiment)
 {
     originalExperiment.RemoveSelectedVertices();
 }
Example #20
0
 public static void Cut(ApplicationContext applicationContext, BaseExperiment originalExperiment)
 {
     Copy (applicationContext, originalExperiment);
     CutSelectedNodes (originalExperiment);
 }
Example #21
0
        internal void DisplayAddedSubgraph(BaseExperiment experiment) 
        {

            foreach(ExperimentNode node in experiment.Vertices) 
            {
                BasicNodeControl componentControl = null;
                if (!m_applicationContext.NodeControlFactory.TryGetNodeControl (node, out componentControl))
                    m_experimentDrawer.DrawComponent(node, true);
            }

            foreach(ExperimentNodeConnection edge in experiment.Edges) 
            {
                NodeConnectionControl componentControl = null;
                if (!m_applicationContext.NodeConnectionControlFactory.TryGetConnectionControl(edge, out componentControl))
                    m_experimentDrawer.DrawEdge(edge, true);
            }
        }
Example #22
0
 // HERZUM SPRINT 2.5 TLAB-157
 private void ClearWidgets(BaseExperiment experiment)
 {
     if  (experiment == null) return;
     foreach(ExperimentNode node in experiment.Vertices) {
         if (node is ScopeNodeBase)
         {
             BasicNodeControl componentControl = null;
             if (m_applicationContext.NodeControlFactory.TryGetNodeControl (node, out componentControl)){
                 ScopeNodeControl scopeNodeControl = componentControl as ScopeNodeControl;
                 if (scopeNodeControl != null){
                     ClearWidgets((node.Data.Metadata as ScopeBaseMetadata).ComponentGraph);
                     OnNodeRemoved (node);
                 }
             }
         } 
         if (node is CompositeComponentNode)
             ClearWidgets((node.Data.Metadata as CompositeComponentBaseMetadata).ComponentGraph);
     }
 }