0
|
1 using System;
|
|
2 using System.Collections.Generic;
|
|
3
|
|
4 namespace BLToolkit.Reflection.Extension
|
|
5 {
|
|
6 public class AttributeNameCollection : Dictionary<string,AttributeExtensionCollection>
|
|
7 {
|
|
8 public new AttributeExtensionCollection this[string attributeName]
|
|
9 {
|
|
10 get
|
|
11 {
|
|
12 if (this == _null)
|
|
13 return AttributeExtensionCollection.Null;
|
|
14
|
|
15 AttributeExtensionCollection ext;
|
|
16
|
|
17 return TryGetValue(attributeName, out ext) ? ext : AttributeExtensionCollection.Null;
|
|
18 }
|
|
19 }
|
|
20
|
|
21 public void Add(AttributeExtension attributeExtension)
|
|
22 {
|
|
23 if (this != _null)
|
|
24 {
|
|
25 // Add attribute.
|
|
26 //
|
|
27 AttributeExtensionCollection attr;
|
|
28
|
|
29 if (!TryGetValue(attributeExtension.Name, out attr))
|
|
30 Add(attributeExtension.Name, attr = new AttributeExtensionCollection());
|
|
31
|
|
32 attr.Add(attributeExtension);
|
|
33
|
|
34 /*
|
|
35 // Convert value type.
|
|
36 //
|
|
37 bool isType = attributeExtension.Name.EndsWith(TypeExtension.AttrName.TypePostfix);
|
|
38
|
|
39 if (isType)
|
|
40 {
|
|
41 string attrName = attributeExtension.Name.Substring(
|
|
42 0, attributeExtension.Name.Length - 5);
|
|
43
|
|
44 AttributeExtensionCollection ext =
|
|
45 (AttributeExtensionCollection)_attributes[attrName];
|
|
46
|
|
47 if (ext != null && ext.Count == 1)
|
|
48 ext[0].Values.ChangeValueType(attributeExtension.Value.ToString());
|
|
49 }
|
|
50 else
|
|
51 {
|
|
52 string attrName = attributeExtension.Name + TypeExtension.AttrName.TypePostfix;
|
|
53
|
|
54 AttributeExtensionCollection ext =
|
|
55 (AttributeExtensionCollection)_attributes[attrName];
|
|
56
|
|
57 if (ext != null && ext.Count == 1)
|
|
58 attributeExtension.Values.ChangeValueType(ext.Value.ToString());
|
|
59 }
|
|
60 */
|
|
61 }
|
|
62 }
|
|
63
|
|
64 public void Add(string name, string value)
|
|
65 {
|
|
66 if (this != _null)
|
|
67 {
|
|
68 var attrName = name;
|
|
69 var valueName = string.Empty;
|
|
70 var idx = name.IndexOf(TypeExtension.ValueName.Delimiter);
|
|
71
|
|
72 if (idx > 0)
|
|
73 {
|
|
74 valueName = name.Substring(idx + 1).TrimStart(TypeExtension.ValueName.Delimiter);
|
|
75 attrName = name.Substring(0, idx);
|
|
76 }
|
|
77
|
|
78 if (valueName.Length == 0)
|
|
79 valueName = TypeExtension.ValueName.Value;
|
|
80 else if (valueName == TypeExtension.ValueName.Type)
|
|
81 valueName = TypeExtension.ValueName.ValueType;
|
|
82
|
|
83 AttributeExtensionCollection ext;
|
|
84
|
|
85 if (TryGetValue(attrName, out ext))
|
|
86 ext[0].Values.Add(valueName, value);
|
|
87 else
|
|
88 {
|
|
89 var attributeExtension = new AttributeExtension { Name = name };
|
|
90
|
|
91 attributeExtension.Values.Add(valueName, value);
|
|
92
|
|
93 Add(attributeExtension);
|
|
94 }
|
|
95 }
|
|
96 }
|
|
97
|
|
98 private static readonly AttributeNameCollection _null = new AttributeNameCollection();
|
|
99 public static AttributeNameCollection Null
|
|
100 {
|
|
101 get { return _null; }
|
|
102 }
|
|
103 }
|
|
104 }
|