|
1 | 1 | using System.Xml;
|
2 |
| -using System.Linq; |
3 | 2 | using NHibernate.Util;
|
4 | 3 | using System.Collections.Generic;
|
5 | 4 | using NHibernate.Cfg.MappingSchema;
|
@@ -95,12 +94,77 @@ public static ICollection<ClassEntry> GetClassEntries(HbmMapping document)
|
95 | 94 | string assembly = document.assembly;
|
96 | 95 | string @namespace = document.@namespace;
|
97 | 96 |
|
98 |
| - classEntries.UnionWith(document.RootClasses.Select(c=> new ClassEntry(null, c.Name, c.EntityName, assembly, @namespace))); |
99 |
| - classEntries.UnionWith(document.SubClasses.Select(c => new ClassEntry(c.extends, c.Name, c.EntityName, assembly, @namespace))); |
100 |
| - classEntries.UnionWith(document.JoinedSubclasses.Select(c => new ClassEntry(c.extends, c.Name, c.EntityName, assembly, @namespace))); |
101 |
| - classEntries.UnionWith(document.UnionSubclasses.Select(c => new ClassEntry(c.extends, c.Name, c.EntityName, assembly, @namespace))); |
| 97 | + classEntries.UnionWith(GetRootClassesEntries(assembly, @namespace, document.RootClasses)); |
| 98 | + classEntries.UnionWith(GetSubclassesEntries(assembly, @namespace, null, document.SubClasses)); |
| 99 | + classEntries.UnionWith(GetJoinedSubclassesEntries(assembly, @namespace, null, document.JoinedSubclasses)); |
| 100 | + classEntries.UnionWith(GetUnionSubclassesEntries(assembly, @namespace, null, document.UnionSubclasses)); |
102 | 101 |
|
103 | 102 | return classEntries;
|
104 | 103 | }
|
| 104 | + |
| 105 | + private static IEnumerable<ClassEntry> GetRootClassesEntries(string assembly, string @namespace,IEnumerable<HbmClass> rootClasses) |
| 106 | + { |
| 107 | + foreach (var rootClass in rootClasses) |
| 108 | + { |
| 109 | + string entityName = rootClass.EntityName; |
| 110 | + yield return new ClassEntry(null, rootClass.Name, entityName, assembly, @namespace); |
| 111 | + foreach (var classEntry in GetSubclassesEntries(assembly, @namespace, entityName, rootClass.Subclasses)) |
| 112 | + { |
| 113 | + yield return classEntry; |
| 114 | + } |
| 115 | + foreach (var classEntry in GetJoinedSubclassesEntries(assembly, @namespace, entityName, rootClass.JoinedSubclasses)) |
| 116 | + { |
| 117 | + yield return classEntry; |
| 118 | + } |
| 119 | + foreach (var classEntry in GetUnionSubclassesEntries(assembly, @namespace, entityName, rootClass.UnionSubclasses)) |
| 120 | + { |
| 121 | + yield return classEntry; |
| 122 | + } |
| 123 | + } |
| 124 | + } |
| 125 | + |
| 126 | + private static IEnumerable<ClassEntry> GetSubclassesEntries(string assembly, string @namespace, string defaultExtends, |
| 127 | + IEnumerable<HbmSubclass> hbmSubclasses) |
| 128 | + { |
| 129 | + foreach (HbmSubclass subclass in hbmSubclasses) |
| 130 | + { |
| 131 | + string extends = subclass.extends ?? defaultExtends; |
| 132 | + yield return new ClassEntry(extends, subclass.Name, subclass.EntityName, assembly, @namespace); |
| 133 | + foreach (ClassEntry classEntry in GetSubclassesEntries(assembly, @namespace, subclass.EntityName,subclass.Subclasses)) |
| 134 | + { |
| 135 | + yield return classEntry; |
| 136 | + } |
| 137 | + } |
| 138 | + } |
| 139 | + |
| 140 | + private static IEnumerable<ClassEntry> GetJoinedSubclassesEntries(string assembly, string @namespace, |
| 141 | + string defaultExtends, |
| 142 | + IEnumerable<HbmJoinedSubclass> hbmJoinedSubclasses) |
| 143 | + { |
| 144 | + foreach (HbmJoinedSubclass subclass in hbmJoinedSubclasses) |
| 145 | + { |
| 146 | + string extends = subclass.extends ?? defaultExtends; |
| 147 | + yield return new ClassEntry(extends, subclass.Name, subclass.EntityName, assembly, @namespace); |
| 148 | + foreach (ClassEntry classEntry in GetJoinedSubclassesEntries(assembly, @namespace, subclass.EntityName, subclass.JoinedSubclasses)) |
| 149 | + { |
| 150 | + yield return classEntry; |
| 151 | + } |
| 152 | + } |
| 153 | + } |
| 154 | + |
| 155 | + private static IEnumerable<ClassEntry> GetUnionSubclassesEntries(string assembly, string @namespace, |
| 156 | + string defaultExtends, |
| 157 | + IEnumerable<HbmUnionSubclass> hbmUnionSubclasses) |
| 158 | + { |
| 159 | + foreach (HbmUnionSubclass subclass in hbmUnionSubclasses) |
| 160 | + { |
| 161 | + string extends = subclass.extends ?? defaultExtends; |
| 162 | + yield return new ClassEntry(extends, subclass.Name, subclass.EntityName, assembly, @namespace); |
| 163 | + foreach (ClassEntry classEntry in GetUnionSubclassesEntries(assembly, @namespace, subclass.EntityName,subclass.UnionSubclasses)) |
| 164 | + { |
| 165 | + yield return classEntry; |
| 166 | + } |
| 167 | + } |
| 168 | + } |
105 | 169 | }
|
106 | 170 | }
|
0 commit comments