Exemplo n.º 1
0
 public TaxonomyTreeVm()
 {
     try
     {
         Tree = new TaxonomyHierarchy(TaxonomyHierarchy.ServiceClient.GetRoot());
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message, "error loading Root");
     }
     Relations = new ObservableCollection<string>();
     Classifications = new ObservableCollection<string>();
 }
Exemplo n.º 2
0
 public TaxonomyTreeVm()
 {
     try
     {
         Tree = new TaxonomyHierarchy(TaxonomyHierarchy.ServiceClient.GetRoot());
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message, "error loading Root");
     }
     Relations       = new ObservableCollection <string>();
     Classifications = new ObservableCollection <string>();
 }
Exemplo n.º 3
0
        protected virtual void OutputTaxonomyValueRecursive(object obj, TaxonomyHierarchy hierarchy, string currentTaxonomy, OutputItem output)
        {
            //check for members
            var members = GetMemberInfos(obj, obj.GetType(), hierarchy.Name);

            //if no members existed, the type did not match the expected (can happen if a pipeline has different pipelineargs)
            if (members.Length == 0)
            {
                output.Entries.Add(new OutputMember(currentTaxonomy, $"Member {hierarchy.Name} not found.", null));
                return;
            }

            //add the current member to the taxonomy
            currentTaxonomy += "." + hierarchy.Name;

            foreach (var info in members)
            {
                object member = null;
                switch (info.MemberType)
                {
                case MemberTypes.Field:
                    member = ((FieldInfo)info).GetValue(obj);
                    break;

                case MemberTypes.Property:
                    member = ((PropertyInfo)info).GetValue(obj);
                    break;
                }

                if (member == null)
                {
                    output.Entries.Add(new OutputMember(currentTaxonomy, "null", info.MemberType));
                    continue;
                }

                //If the member is IEnumerable (and not a string), enumerate and treat each of them.
                if (!(member is string) && member is IEnumerable)
                {
                    int  i   = 0;
                    bool any = false;

                    //We use stringindexing if it's not a generic IEnumerable and there's a string indexer
                    var stringIndexParam = member.GetType().StringIndexParameter();
                    var stringIndexed    = member.GetType().EnumerableType() == null && stringIndexParam != null;

                    foreach (var entry in ((IEnumerable)member))
                    {
                        if (i >= SettingsService.MaxEnumerableIterations)
                        {
                            break;
                        }

                        any = true;
                        var enumTaxonomy = currentTaxonomy + "[" + i + "]";

                        if (hierarchy.Selected)
                        {
                            output.Entries.Add(new OutputMember(currentTaxonomy, entry.ToString(), info.MemberType));
                        }

                        foreach (var child in hierarchy.Children)
                        {
                            if (stringIndexed)
                            {
                                var value = stringIndexParam.GetValue(member, new object[] { entry });
                                var kvp   = new KeyValuePair <string, object>((string)entry, value);
                                OutputTaxonomyValueRecursive(kvp, child, enumTaxonomy, output);
                            }
                            else
                            {
                                OutputTaxonomyValueRecursive(entry, child, enumTaxonomy, output);
                            }
                        }

                        i++;
                    }
                    if (!any)
                    {
                        output.Entries.Add(new OutputMember(currentTaxonomy, "IEnumerable empty", info.MemberType));
                    }
                }
                else
                {
                    if (hierarchy.Selected)
                    {
                        output.Entries.Add(new OutputMember(currentTaxonomy, member.ToString(), info.MemberType));
                    }

                    foreach (var child in hierarchy.Children)
                    {
                        OutputTaxonomyValueRecursive(member, child, currentTaxonomy, output);
                    }
                }
            }
        }