Example #1
0
        private void ReleaseDynamicUpdateMode(Activity seedActivity)
        {
            Queue <Activity> queue = new Queue <Activity>();

            queue.Enqueue(seedActivity);
            while (queue.Count > 0)
            {
                Activity activity = queue.Dequeue() as Activity;
                activity.Readonly          = false;
                activity.DynamicUpdateMode = false;
                foreach (DependencyProperty dependencyProperty in activity.MetaDependencyProperties)
                {
                    if (activity.IsBindingSet(dependencyProperty))
                    {
                        ActivityBind activityBind = activity.GetBinding(dependencyProperty);
                        if (activityBind != null)
                        {
                            activityBind.DynamicUpdateMode = false;
                        }
                    }
                }
                if (activity is CompositeActivity)
                {
                    CompositeActivity compositeActivity = activity as CompositeActivity;
                    compositeActivity.Activities.ListChanged -= new EventHandler <ActivityCollectionChangeEventArgs>(this.OnActivityListChanged);
                    foreach (Activity activity2 in ((CompositeActivity)activity).Activities)
                    {
                        queue.Enqueue(activity2);
                    }
                }
            }
        }
Example #2
0
        private void ApplyDynamicUpdateMode(Activity seedActivity)
        {
            Queue <Activity> queue = new Queue <Activity>();

            queue.Enqueue(seedActivity);
            while (queue.Count > 0)
            {
                Activity activity = queue.Dequeue();
                activity.Readonly          = true;
                activity.DynamicUpdateMode = true;
                foreach (DependencyProperty property in activity.MetaDependencyProperties)
                {
                    if (activity.IsBindingSet(property))
                    {
                        ActivityBind binding = activity.GetBinding(property);
                        if (binding != null)
                        {
                            binding.DynamicUpdateMode = true;
                        }
                    }
                }
                if (activity is CompositeActivity)
                {
                    CompositeActivity activity2 = activity as CompositeActivity;
                    activity2.Activities.ListChanged += new EventHandler <ActivityCollectionChangeEventArgs>(this.OnActivityListChanged);
                    foreach (Activity activity3 in ((CompositeActivity)activity).Activities)
                    {
                        queue.Enqueue(activity3);
                    }
                }
            }
        }
Example #3
0
        public bool WalkProperties(Activity activity, object obj)
        {
            Activity currentActivity = obj as Activity;

            PropertyInfo[] props = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
            foreach (PropertyInfo prop in props)
            {
                // !!Work around: no indexer property walking
                if (prop.GetIndexParameters() != null && prop.GetIndexParameters().Length > 0)
                {
                    continue;
                }

                DesignerSerializationVisibility visibility = GetSerializationVisibility(prop);
                if (visibility == DesignerSerializationVisibility.Hidden)
                {
                    continue;
                }

                //Try to see if we have dynamic property associated with the object on the same object
                //if so then we should compare if the dynamic property values match with the property type
                //if not we bail out
                object             propValue          = null;
                DependencyProperty dependencyProperty = DependencyProperty.FromName(prop.Name, obj.GetType());
                if (dependencyProperty != null && currentActivity != null)
                {
                    if (currentActivity.IsBindingSet(dependencyProperty))
                    {
                        propValue = currentActivity.GetBinding(dependencyProperty);
                    }
                    else
                    {
                        propValue = currentActivity.GetValue(dependencyProperty);
                    }
                }
                else
                {
                    try
                    {
                        propValue = prop.CanRead ? prop.GetValue(obj, null) : null;
                    }
                    catch
                    {
                        // Eat exceptions that occur while invoking the getter.
                    }
                }

                if (FoundProperty != null)
                {
                    WalkerEventArgs args = new WalkerEventArgs(activity, propValue, prop, obj);
                    FoundProperty(this, args);
                    if (args.Action == WalkerAction.Skip)
                    {
                        continue;
                    }
                    else if (args.Action == WalkerAction.Abort)
                    {
                        return(false);
                    }
                }

                if (propValue is IList)
                {
                    //We do not need to reflect on the properties of the list
                    foreach (object childObj in (IList)propValue)
                    {
                        if (FoundProperty != null)
                        {
                            WalkerEventArgs args = new WalkerEventArgs(activity, childObj, null, propValue);
                            FoundProperty(this, args);
                            if (args.Action == WalkerAction.Skip)
                            {
                                continue;
                            }
                            else if (args.Action == WalkerAction.Abort)
                            {
                                return(false);
                            }
                        }
                        if (childObj != null && IsBrowsableType(childObj.GetType()))
                        {
                            if (!WalkProperties(activity, childObj))
                            {
                                return(false);
                            }
                        }
                    }
                }
                else if (propValue != null && IsBrowsableType(propValue.GetType()))
                {
                    if (!WalkProperties(activity, propValue))
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
 internal static void ValidateRoles(Activity activity, string identity)
 {
     DependencyProperty dependencyProperty = DependencyProperty.FromName("Roles", activity.GetType().BaseType);
     if (dependencyProperty == null)
     {
         dependencyProperty = DependencyProperty.FromName("Roles", activity.GetType());
     }
     if (dependencyProperty != null)
     {
         ActivityBind binding = activity.GetBinding(dependencyProperty);
         if (binding != null)
         {
             WorkflowRoleCollection runtimeValue = binding.GetRuntimeValue(activity) as WorkflowRoleCollection;
             if ((runtimeValue != null) && !runtimeValue.IncludesIdentity(identity))
             {
                 throw new WorkflowAuthorizationException(activity.Name, identity);
             }
         }
     }
 }
        internal static void ValidateRoles(Activity activity, string identity)
        {
            DependencyProperty dependencyProperty = DependencyProperty.FromName("Roles", activity.GetType().BaseType);
            if (dependencyProperty == null)
                dependencyProperty = DependencyProperty.FromName("Roles", activity.GetType());

            if (dependencyProperty == null)
                return;

            ActivityBind rolesBind = activity.GetBinding(dependencyProperty) as ActivityBind;
            if (rolesBind == null)
                return;

            WorkflowRoleCollection roles = rolesBind.GetRuntimeValue(activity) as WorkflowRoleCollection;
            if (roles == null)
                return;

            if (!roles.IncludesIdentity(identity))
                throw new WorkflowAuthorizationException(activity.Name, identity);
        }
Example #6
0
        public bool WalkProperties(Activity activity, object obj)
        {
            Activity activity2 = obj as Activity;

            foreach (PropertyInfo info in obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
            {
                if (((info.GetIndexParameters() == null) || (info.GetIndexParameters().Length <= 0)) && (GetSerializationVisibility(info) != DesignerSerializationVisibility.Hidden))
                {
                    object             currentValue       = null;
                    DependencyProperty dependencyProperty = DependencyProperty.FromName(info.Name, obj.GetType());
                    if ((dependencyProperty != null) && (activity2 != null))
                    {
                        if (activity2.IsBindingSet(dependencyProperty))
                        {
                            currentValue = activity2.GetBinding(dependencyProperty);
                        }
                        else
                        {
                            currentValue = activity2.GetValue(dependencyProperty);
                        }
                    }
                    else
                    {
                        try
                        {
                            currentValue = info.CanRead ? info.GetValue(obj, null) : null;
                        }
                        catch
                        {
                        }
                    }
                    if (this.FoundProperty != null)
                    {
                        WalkerEventArgs eventArgs = new WalkerEventArgs(activity, currentValue, info, obj);
                        this.FoundProperty(this, eventArgs);
                        if (eventArgs.Action == WalkerAction.Skip)
                        {
                            continue;
                        }
                        if (eventArgs.Action == WalkerAction.Abort)
                        {
                            return(false);
                        }
                    }
                    if (currentValue is IList)
                    {
                        foreach (object obj3 in (IList)currentValue)
                        {
                            if (this.FoundProperty != null)
                            {
                                WalkerEventArgs args2 = new WalkerEventArgs(activity, obj3, null, currentValue);
                                this.FoundProperty(this, args2);
                                if (args2.Action == WalkerAction.Skip)
                                {
                                    continue;
                                }
                                if (args2.Action == WalkerAction.Abort)
                                {
                                    return(false);
                                }
                            }
                            if (((obj3 != null) && IsBrowsableType(obj3.GetType())) && !this.WalkProperties(activity, obj3))
                            {
                                return(false);
                            }
                        }
                    }
                    else if (((currentValue != null) && IsBrowsableType(currentValue.GetType())) && !this.WalkProperties(activity, currentValue))
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }