Ejemplo n.º 1
0
        /// <summary>
        /// Gets all broken rules for an object graph.
        /// </summary>
        /// <param name="root">The root.</param>
        /// <returns>BrukenRulesTree list</returns>
        public static BrokenRulesTree GetAllBrokenRules(object root)
        {
            var  list    = new BrokenRulesTree();
            long counter = 1;

            AddNodeToBrukenRules(ref list, ref counter, null, root);

            return(list);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Gets all nodes in tree that have broken rules.
        /// </summary>
        /// <param name="root">The root.</param>
        /// <param name="errorsOnly">if set to <c>true</c> will only return objects that gave IsValid = false.</param>
        /// <returns></returns>
        public static BrokenRulesTree GetAllBrokenRules(object root, bool errorsOnly)
        {
            var  list    = new BrokenRulesTree();
            long counter = 1;
            long childBrokenRuleCount = 0;

            AddNodeToBrukenRules(ref list, ref counter, null, root, errorsOnly, ref childBrokenRuleCount);

            return(list);
        }
Ejemplo n.º 3
0
        private static void AddNodeToBrukenRules(ref BrokenRulesTree list, ref long counter, object parentKey, object obj)
        {
            // is this a single editable object
            if (obj is Csla.Core.BusinessBase)
            {
                var nodeKey = counter++;
                var bo      = (Csla.Core.BusinessBase)obj;
                if (!bo.IsValid)
                {
                    list.Add(new BrokenRulesNode()
                    {
                        Parent = parentKey, Node = nodeKey, BrokenRules = bo.BrokenRulesCollection, Object = obj
                    });
                }

                // get managed child properties
                foreach (var child in ((IManageProperties)bo).GetChildren())
                {
                    AddNodeToBrukenRules(ref list, ref counter, nodeKey, child);
                }

                //// is there registered private properties of RelationShipType child?
                //var props = fdm.GetRegisteredProperties();
                //foreach (var propertyInfo in props)
                //{
                //  if (((propertyInfo.RelationshipType & RelationshipTypes.Child) > 0) &&
                //      ((propertyInfo.RelationshipType & RelationshipTypes.PrivateField) > 0))
                //  {
                //    AddNodeToBrukenRules(ref list, obj, ((IManageProperties) obj).ReadProperty(propertyInfo));
                //  }
                //}
            }

            // or a list og EditableObject (both BindingList and ObservableCollection)
            else if (obj is IEditableCollection)
            {
                var nodeKey = counter++;
                var isValid = ((ITrackStatus)obj).IsValid;
                if (isValid)
                {
                    return;  // exit if object is valid
                }
                list.Add(new BrokenRulesNode()
                {
                    Parent = parentKey, Node = nodeKey, Object = obj
                });

                foreach (object child in (IEnumerable)obj)
                {
                    AddNodeToBrukenRules(ref list, ref counter, nodeKey, child);
                }
            }
            return;
        }
Ejemplo n.º 4
0
        public void Collect()
        {
            _brokenRules.ClearBrokenRules();

            BrokenRulesTree brokenRulesTree = _rootObject.GetAllBrokenRules();

            if (brokenRulesTree != null)
            {
                foreach (BrokenRulesNode node in brokenRulesTree)
                {
                    CollectBrokenRules(node);
                }
            }
        }
Ejemplo n.º 5
0
        private static void AddNodeToBrukenRules(ref BrokenRulesTree list, ref long counter, object parentKey, object obj, bool errorsOnly, ref long childBrokenRuleCount)
        {
            // is this a single editable object
            if (obj is Csla.Core.BusinessBase)
            {
                var  nodeKey = counter++;
                var  bo      = (Csla.Core.BusinessBase)obj;
                long myChildBrokenRuleCount = bo.BrokenRulesCollection.Count;
                var  node = new BrokenRulesNode()
                {
                    Parent = parentKey, Node = nodeKey, BrokenRules = bo.BrokenRulesCollection, Object = obj
                };
                list.Add(node);

                // get managed child properties
                foreach (var child in ((IManageProperties)bo).GetChildren())
                {
                    AddNodeToBrukenRules(ref list, ref counter, nodeKey, child, errorsOnly, ref myChildBrokenRuleCount);
                }

                // remove node if it has no child with broken rules.
                if (!errorsOnly && myChildBrokenRuleCount == 0)
                {
                    list.Remove(node);
                }
                if (errorsOnly && bo.IsValid)
                {
                    list.Remove(node);
                }
                childBrokenRuleCount += myChildBrokenRuleCount;
            }

            // or a list of EditableObject (both BindingList and ObservableCollection)
            else if (obj is IEditableCollection)
            {
                var nodeKey = counter++;
                var isValid = ((ITrackStatus)obj).IsValid;
                var node    = new BrokenRulesNode()
                {
                    Parent = parentKey, Node = nodeKey, Object = obj, BrokenRules = new BrokenRulesCollection(true)
                };
                long myChildBrokenRuleCount = 0;

                list.Add(node);

                foreach (var child in (IEnumerable)obj)
                {
                    AddNodeToBrukenRules(ref list, ref counter, nodeKey, child, errorsOnly, ref myChildBrokenRuleCount);
                }

                // remove node if it has no child with broken rules.
                if (!errorsOnly && myChildBrokenRuleCount == 0)
                {
                    list.Remove(node);
                }
                if (errorsOnly && isValid)
                {
                    list.Remove(node);
                }
                childBrokenRuleCount += myChildBrokenRuleCount;
            }
            return;
        }
Ejemplo n.º 6
0
    private static void AddNodeToBrukenRules(ref BrokenRulesTree list, ref long counter, object parentKey, object obj, bool errorsOnly, ref long childBrokenRuleCount)
    {
      // is this a single editable object 
      if (obj is Csla.Core.BusinessBase)
      {
        var nodeKey = counter++;
        var bo = (Csla.Core.BusinessBase)obj;
        long myChildBrokenRuleCount = bo.BrokenRulesCollection.Count;
        var node = new BrokenRulesNode() { Parent = parentKey, Node = nodeKey, BrokenRules = bo.BrokenRulesCollection, Object = obj };
        list.Add(node);

        // get managed child properties 
        foreach (var child in ((IManageProperties)bo).GetChildren())
        {
          AddNodeToBrukenRules(ref list, ref counter, nodeKey, child, errorsOnly, ref myChildBrokenRuleCount);
        }

        // remove node if it has no child with broken rules. 
        if (!errorsOnly && myChildBrokenRuleCount == 0)
        {
          list.Remove(node);
        }
        if (errorsOnly && bo.IsValid)
        {
          list.Remove(node);
        }
        childBrokenRuleCount += myChildBrokenRuleCount;
      }

      // or a list of EditableObject (both BindingList and ObservableCollection)
      else if (obj is IEditableCollection)
      {
        var nodeKey = counter++;
        var isValid = ((ITrackStatus)obj).IsValid;
        var node = new BrokenRulesNode() { Parent = parentKey, Node = nodeKey, Object = obj };
        long myChildBrokenRuleCount = 0;

        list.Add(node);

        foreach (var child in (IEnumerable)obj)
        {
          AddNodeToBrukenRules(ref list, ref counter, nodeKey, child, errorsOnly, ref myChildBrokenRuleCount);
        }

        // remove node if it has no child with broken rules. 
        if (!errorsOnly && myChildBrokenRuleCount == 0)
        {
          list.Remove(node);
        }
        if (errorsOnly && isValid)
        {
          list.Remove(node);
        }
        childBrokenRuleCount += myChildBrokenRuleCount;
      }
      return;
    }
Ejemplo n.º 7
0
    /// <summary>
    /// Gets all nodes in tree that have broken rules.
    /// </summary>
    /// <param name="root">The root.</param>
    /// <param name="errorsOnly">if set to <c>true</c> will only return objects that gave IsValid = false.</param>
    /// <returns></returns>
    public static BrokenRulesTree GetAllBrokenRules(object root, bool errorsOnly)
    {
      var list = new BrokenRulesTree();
      long counter = 1;
      long childBrokenRuleCount = 0;
      AddNodeToBrukenRules(ref list, ref counter, null, root, errorsOnly, ref childBrokenRuleCount);

      return list;
    }