示例#1
0
        public override void PerformReflection(ReflectionContext context)
        {
            WorkflowNode workflowNode = context.CurrentTreeNode as WorkflowNode;

            if (workflowNode == null)
            {
                throw new ApplicationException("Expected the parent node to be a workflow node.");
            }

            object workflowInstance = null;

            try
            {
                workflowInstance = workflowNode.WorkflowType.InvokeMember(string.Empty, BindingFlags.CreateInstance, null, null, null, CultureInfo.InvariantCulture);
            }
            catch (Exception exc)
            {
                MessageBox.Show("Could not create workflow type: " + exc.ToString());
                return;
            }

            TreeNode activitiesNode = new TreeNode();

            activitiesNode.Text       = "Activities";
            activitiesNode.ImageIndex = activitiesNode.SelectedImageIndex = context.GetImageIndex(typeof(WorkflowActivitiesComponent), ActivitiesNodeImageName);

            workflowNode.Nodes.Add(activitiesNode);

            if (!(workflowInstance is CompositeActivity))
            {
                TreeNode none = new TreeNode();
                none.Text = "<Workflow is not a CompositeActivity>";
                activitiesNode.Nodes.Add(none);
            }
            else
            {
                Queue <KeyValuePair <CompositeActivity, TreeNode> > toProcess = new Queue <KeyValuePair <CompositeActivity, TreeNode> >();
                toProcess.Enqueue(new KeyValuePair <CompositeActivity, TreeNode>((CompositeActivity)workflowInstance, activitiesNode));

                while (toProcess.Count > 0)
                {
                    KeyValuePair <CompositeActivity, TreeNode> pair = toProcess.Dequeue();
                    CompositeActivity compositeActivity             = pair.Key;
                    TreeNode          parent = pair.Value;

                    foreach (Activity activity in compositeActivity.Activities)
                    {
                        ActivityNode activityNode = new ActivityNode();
                        activityNode.Activity   = activity;
                        activityNode.ImageIndex = activityNode.SelectedImageIndex = context.GetImageIndex(typeof(WorkflowActivitiesComponent), ActivityNodeImageName);
                        parent.Nodes.Add(activityNode);

                        ReflectChildComponents(context.CreateClone(activityNode));

                        if (activity is CompositeActivity)
                        {
                            toProcess.Enqueue(new KeyValuePair <CompositeActivity, TreeNode>((CompositeActivity)activity, activityNode));
                        }
                    }
                }
            }
        }
示例#2
0
        public override void PerformReflection(ReflectionContext context)
        {
            WorkflowNode workflowNode = context.CurrentTreeNode as WorkflowNode;

            if (workflowNode == null)
            {
                throw new ApplicationException("Expected the parent node to be a workflow node.");
            }

            object workflowInstance = null;

            try
            {
                workflowInstance = workflowNode.WorkflowType.InvokeMember(string.Empty, BindingFlags.CreateInstance, null, null, null, CultureInfo.InvariantCulture);
            }
            catch (Exception exc)
            {
                MessageBox.Show("Could not create workflow type: " + exc.ToString());
                return;
            }

            TreeNode activitiesNode = new TreeNode();
            activitiesNode.Text = "Activities";
            activitiesNode.ImageIndex = activitiesNode.SelectedImageIndex = context.GetImageIndex(typeof(WorkflowActivitiesComponent), ActivitiesNodeImageName);

            workflowNode.Nodes.Add(activitiesNode);

            if (!(workflowInstance is CompositeActivity))
            {
                TreeNode none = new TreeNode();
                none.Text = "<Workflow is not a CompositeActivity>";
                activitiesNode.Nodes.Add(none);
            }
            else
            {
                Queue<KeyValuePair<CompositeActivity, TreeNode>> toProcess = new Queue<KeyValuePair<CompositeActivity, TreeNode>>();
                toProcess.Enqueue(new KeyValuePair<CompositeActivity, TreeNode>((CompositeActivity)workflowInstance, activitiesNode));

                while (toProcess.Count > 0)
                {
                    KeyValuePair<CompositeActivity, TreeNode> pair = toProcess.Dequeue();
                    CompositeActivity compositeActivity = pair.Key;
                    TreeNode parent = pair.Value;
                    
                    foreach (Activity activity in compositeActivity.Activities)
                    {
                        ActivityNode activityNode = new ActivityNode ();
                        activityNode.Activity = activity;
                        activityNode.ImageIndex = activityNode.SelectedImageIndex = context.GetImageIndex(typeof(WorkflowActivitiesComponent), ActivityNodeImageName);
                        parent.Nodes.Add(activityNode);

                        ReflectChildComponents(context.CreateClone(activityNode));

                        if (activity is CompositeActivity)
                        {
                            toProcess.Enqueue(new KeyValuePair<CompositeActivity, TreeNode>((CompositeActivity)activity, activityNode));
                        }
                    }
                }
            }
        }