DirectOutputR1
DirectOutput framework R1 for virtual pinball cabinets.
Go to:
Overview 
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros Pages
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  if (!ValidValuesDescription.IsNullOrWhiteSpace())
86  {
87  S += "__Valid values__\n\n";
88  S += ValidValuesDescription + "\n";
89 
90  }
91 
92 
93  return S.ToString();
94 
95  }
96 
97 
98 
99  private string GetNestedPropertiesDocu(PropertyDocuData PDDP, int Level = 0)
100  {
101  string S = "";
102  string Indent = new string(' ', Level * 2);
103  List<PropertyDocuData> L = PDDP.ChildPropertyDocuDataList;
104  L.Sort((PDD1, PDD2) => PDD1.Name.CompareTo(PDD2.Name));
105  if (L.Count > 0)
106  {
107  foreach (PropertyDocuData PDD in L)
108  {
109  S += Indent + "* __{0}__<br/>".Build(PDD.Name);
110  if (!PDD.Value.IsNullOrWhiteSpace() || !PDD.ValidValuesDescription.IsNullOrWhiteSpace())
111  {
112  if (!PDD.Value.IsNullOrWhiteSpace())
113  {
114  S += Indent + " "+PDD.Value;
115  S += "\n\n";
116  };
117  if (!PDD.ValidValuesDescription.IsNullOrWhiteSpace())
118  {
119  S += Indent + " " + PDD.ValidValuesDescription + "\n\n";
120  }
121  }
122  else if (!PDD.Summary.IsNullOrWhiteSpace())
123  {
124  S += Indent + " " + PDD.Summary;
125  S += "\n\n";
126  }
127  string N = GetNestedPropertiesDocu(PDD, Level + 1);
128  if (!N.IsNullOrWhiteSpace())
129  {
130  S += Indent + " This property has the following childs:\n";
131  S += N;
132  }
133 
134  }
135  }
136  return S;
137  }
138 
139 
140  public string Name
141  {
142  get
143  {
144  return PropertyInfo.Name;
145  }
146  }
147 
148  public string TypeName
149  {
150  get
151  {
152  return PropertyInfo.PropertyType.Name;
153  }
154  }
155 
156  public string NamespaceName
157  {
158  get
159  {
160  return PropertyInfo.PropertyType.Namespace;
161  }
162  }
163 
164  public string ValidValuesDescription
165  {
166  get
167  {
168  string S = "";
169  if (PropertyInfo.PropertyType.IsEnum)
170  {
171  S = "The property {0} accepts the following values:\n\n".Build(Name);
172  S += string.Join("\n* ", Enum.GetNames(PropertyInfo.PropertyType));
173 
174 
175  }
176 
177  return S;
178  }
179  }
180 
181  public List<PropertyDocuData> ChildPropertyDocuDataList
182  {
183  get
184  {
185  List<PropertyDocuData> L = new List<PropertyDocuData>();
186  if (!PropertyInfo.PropertyType.IsValueType && PropertyInfo.PropertyType.Namespace.ToUpper() != "SYSTEM")
187  {
188  if (PropertyInfo.PropertyType.IsGenericList())
189  {
190  Type ItemType = PropertyInfo.PropertyType.GetGetGenericCollectionTypeArguments()[0];
191  foreach (PropertyInfo PI in ItemType.GetXMLSerializableProperties())
192  {
193  L.Add(new PropertyDocuData() { PropertyInfo = PI });
194  }
195 
196  }
197  else if (PropertyInfo.PropertyType.IsGenericDictionary())
198  {
199  throw new NotImplementedException();
200  }
201  else
202  {
203  foreach (PropertyInfo PI in PropertyInfo.PropertyType.GetXMLSerializableProperties())
204  {
205  L.Add(new PropertyDocuData() { PropertyInfo = PI });
206  }
207  }
208 
209  }
210  return L;
211  }
212 
213  }
214 
215  }
216 }