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>(); }
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>(); }
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); } } } }