WIP
DirectOutput framework for virtual pinball cabinets WIP
Go to:
Overview 
PropertyDocuData.cs
Go to the documentation of this file.
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Reflection;
6 
7 namespace DocumentationHelper
8 {
9  public class PropertyDocuData
10  {
12 
13 
14 
15 
16  public string Summary
17  {
18  get
19  {
20  string N = "{0}.{1}.{2}".Build(PropertyInfo.DeclaringType.Namespace, PropertyInfo.DeclaringType.Name, PropertyInfo.Name);
21  if (VSXmlDocu.PropertySummary.ContainsKey(N))
22  {
23  return VSXmlDocu.PropertySummary[N];
24  }
25  return "";
26  }
27  }
28 
29 
30  public string Value
31  {
32  get
33  {
34  string N = "{0}.{1}.{2}".Build(PropertyInfo.DeclaringType.Namespace, PropertyInfo.DeclaringType.Name, PropertyInfo.Name);
35  if (VSXmlDocu.PropertyValue.ContainsKey(N))
36  {
37  return VSXmlDocu.PropertyValue[N];
38  }
39  return "";
40  }
41  }
42 
43  public string GetDocu()
44  {
45  string S = "";
46 
47  S += "\\subsubsection {0}_{1}_{2} {2}\n\n".Build(PropertyInfo.ReflectedType.Namespace.Replace(".", "_"), PropertyInfo.ReflectedType.Name, Name);
48 
49 
50 
51  if (!Value.IsNullOrWhiteSpace() || !ValidValuesDescription.IsNullOrWhiteSpace())
52  {
53  if (!Value.IsNullOrWhiteSpace())
54  {
55  S += Value;
56  S += "\n\n";
57  };
58  if (!ValidValuesDescription.IsNullOrWhiteSpace())
59  {
60  S += ValidValuesDescription + "\n\n";
61  }
62  }
63  else if (!Summary.IsNullOrWhiteSpace())
64  {
65  S += Summary;
66  S += "\n\n";
67  }
68 
69  //S += "__Value type__\n";
70  //S += "The property {0} is of type _{1}_.\n".Build(Name, TypeName);
71  //S += "This type is defined in namespace {0}.\n\n".Build(TypeNamespaceName);
72  //S += "\n";
73 
74 
75  string N = GetNestedPropertiesDocu(this);
76  if (!N.IsNullOrWhiteSpace())
77  {
78  S += "__Nested Properties__\n\n";
79  S += "The following nested propteries exist for {0}:\n".Build(Name);
80  S += N;
81 
82  S += "\n";
83  }
84 
85 
86 
87  return S.ToString();
88 
89  }
90 
91 
92 
93  private string GetNestedPropertiesDocu(PropertyDocuData PDDP, int Level = 0)
94  {
95  string S = "";
96  string Indent = new string(' ', Level * 2);
97  List<PropertyDocuData> L = PDDP.ChildPropertyDocuDataList;
98  L.Sort((PDD1, PDD2) => PDD1.Name.CompareTo(PDD2.Name));
99  if (L.Count > 0)
100  {
101  foreach (PropertyDocuData PDD in L)
102  {
103  S += Indent + "* __{0}__<br/>".Build(PDD.Name);
104  if (!PDD.Value.IsNullOrWhiteSpace() || !PDD.ValidValuesDescription.IsNullOrWhiteSpace())
105  {
106  if (!PDD.Value.IsNullOrWhiteSpace())
107  {
108  S += Indent + " "+PDD.Value;
109  S += "\n\n";
110  };
111  if (!PDD.ValidValuesDescription.IsNullOrWhiteSpace())
112  {
113  S += Indent + " " + PDD.ValidValuesDescription + "\n\n";
114  }
115  }
116  else if (!PDD.Summary.IsNullOrWhiteSpace())
117  {
118  S += Indent + " " + PDD.Summary;
119  S += "\n\n";
120  }
121  string N = GetNestedPropertiesDocu(PDD, Level + 1);
122  if (!N.IsNullOrWhiteSpace())
123  {
124  S += Indent + " This property has the following childs:\n";
125  S += N;
126  }
127 
128  }
129  }
130  return S;
131  }
132 
133 
134  public string Name
135  {
136  get
137  {
138  return PropertyInfo.Name;
139  }
140  }
141 
142  public string TypeName
143  {
144  get
145  {
146  return PropertyInfo.PropertyType.Name;
147  }
148  }
149 
150  public string NamespaceName
151  {
152  get
153  {
154  return PropertyInfo.PropertyType.Namespace;
155  }
156  }
157 
158  public string ValidValuesDescription
159  {
160  get
161  {
162  string S = "";
163  if (PropertyInfo.PropertyType.IsEnum)
164  {
165  S = "The property {0} accepts the following values:\n\n".Build(Name);
166  foreach (string N in Enum.GetNames(PropertyInfo.PropertyType))
167  {
168  S += "* __" + N + "__";
169 
170 
171  string SN = "{0}.{1}.{2}".Build(PropertyInfo.PropertyType.Namespace, PropertyInfo.PropertyType.Name, N);
172  if (VSXmlDocu.EnumSummary.ContainsKey(SN))
173  {
174  S += ": " + VSXmlDocu.EnumSummary[SN].Replace("\n","");
175  }
176 
177  S += "\n";
178  }
179 
180 
181 
182  }
183 
184  return S;
185  }
186  }
187 
188  public List<PropertyDocuData> ChildPropertyDocuDataList
189  {
190  get
191  {
192  List<PropertyDocuData> L = new List<PropertyDocuData>();
193  if (!PropertyInfo.PropertyType.IsValueType && PropertyInfo.PropertyType.Namespace.ToUpper() != "SYSTEM")
194  {
195  if (PropertyInfo.PropertyType.IsGenericList())
196  {
197  Type ItemType = PropertyInfo.PropertyType.GetGetGenericCollectionTypeArguments()[0];
198  foreach (PropertyInfo PI in ItemType.GetXMLSerializableProperties())
199  {
200  L.Add(new PropertyDocuData() { PropertyInfo = PI });
201  }
202 
203  }
204  else if (PropertyInfo.PropertyType.IsGenericDictionary())
205  {
206  throw new NotImplementedException();
207  }
208  else
209  {
210  foreach (PropertyInfo PI in PropertyInfo.PropertyType.GetXMLSerializableProperties())
211  {
212  L.Add(new PropertyDocuData() { PropertyInfo = PI });
213  }
214  }
215 
216  }
217  return L;
218  }
219 
220  }
221 
222  }
223 }
List< PropertyDocuData > ChildPropertyDocuDataList