55namespace Xtensive . Orm . Localization . Tests . Model
66{
77 [ HierarchyRoot ( InheritanceSchema = InheritanceSchema . ConcreteTable ) ]
8- public abstract class IdentifiedEntity : Entity
8+ public abstract class AbstractDictionary : Entity
99 {
1010 [ Key , Field ]
1111 public int Id { get ; set ; }
12-
13- [ Version , Field ( Nullable = false ) ]
14- public int RecordVersion { get ; set ; }
15-
16- public IdentifiedEntity ( Session session ) : base ( session ) { }
17- }
18-
19- public abstract class AbstractDictionary : IdentifiedEntity
20- {
21- public const string TableNamePrefix = "Dict_" ;
22-
12+
2313 [ Field ( Nullable = false , Length = 64 ) ]
2414 public string Identifier { get ; set ; }
25- [ Field ( Nullable = false ) ]
26- public bool Enabled { get ; set ; }
27- [ Field ( Nullable = false ) ]
28- public bool Selectable { get ; set ; }
29- [ Field ( Nullable = false ) ]
30- public bool Displayable { get ; set ; }
15+
16+ // abstract property
3117 public abstract string Name { get ; set ; }
32- public abstract string Description { get ; set ; }
3318
3419 public AbstractDictionary ( Session session ) : base ( session ) { }
3520 }
3621
37- public class AbstractNonLocalizableDictionary : AbstractDictionary
38- {
39- [ Field ( Nullable = false , Length = 512 ) ]
40- public override string Name { get ; set ; }
41- [ Field ( Length = 2048 , LazyLoad = true ) ]
42- public override string Description { get ; set ; }
43-
44- public AbstractNonLocalizableDictionary ( Session session ) : base ( session ) { }
45- }
46-
4722 public abstract class AbstractLocalizableDictionary < T , TT > : AbstractDictionary , ILocalizable < TT >
4823 where T : AbstractLocalizableDictionary < T , TT >
4924 where TT : AbstractDictionaryLocalization < T , TT >
5025 {
5126 public override string Name { get => Localizations . Current . Name ; set => Localizations . Current . Name = value ; }
52- public override string Description { get => Localizations . Current . Description ; set => Localizations . Current . Description = value ; }
5327
5428 [ Field ]
5529 public LocalizationSet < TT > Localizations { get ; private set ; }
@@ -61,100 +35,21 @@ public abstract class AbstractDictionaryLocalization<T, TT> : Localization<T>
6135 where TT : AbstractDictionaryLocalization < T , TT >
6236 where T : AbstractLocalizableDictionary < T , TT >
6337 {
64- public const string TableNamePrefix = AbstractDictionary . TableNamePrefix ;
65- public const string TableNameSuffix = "_Localization" ;
66-
6738 [ Field ( Nullable = false , Length = 512 ) ]
6839 public string Name { get ; set ; }
69- [ Field ( Length = 2048 , LazyLoad = true ) ]
70- public string Description { get ; set ; }
71-
72- [ Version , Field ( Nullable = false ) ]
73- public int RecordVersion { get ; set ; }
7440
7541 protected AbstractDictionaryLocalization ( Session session , CultureInfo culture , T target ) : base ( session , culture , target ) { }
7642 }
7743
78- [ TableMapping ( TableNamePrefix + nameof ( CommunicationPlatform ) ) ]
79- public class CommunicationPlatform : AbstractNonLocalizableDictionary
44+ public class Country : AbstractLocalizableDictionary < Country , CountryLocalization > , ILocalizable < CountryLocalization >
8045 {
81- [ Field ( Length = 50 ) ]
82- public string ProtocolPrefix { get ; set ; }
83-
84- public CommunicationPlatform ( Session session ) : base ( session ) { }
85- }
86-
87- [ TableMapping ( TableNamePrefix + nameof ( BuiltinMessage ) ) ]
88- public class BuiltinMessage : AbstractLocalizableDictionary < BuiltinMessage , BuiltinMessageLocalization > , ILocalizable < BuiltinMessageLocalization >
89- {
90- public BuiltinMessage ( Session session ) : base ( session ) { }
91- }
92-
93- [ HierarchyRoot ]
94- [ TableMapping ( TableNamePrefix + nameof ( BuiltinMessage ) + TableNameSuffix ) ]
95- public class BuiltinMessageLocalization : AbstractDictionaryLocalization < BuiltinMessage , BuiltinMessageLocalization >
96- {
97- public BuiltinMessageLocalization ( Session session , CultureInfo culture , BuiltinMessage target ) : base ( session , culture , target ) { }
98- }
99-
100- public class Country : IdentifiedEntity , ILocalizable < CountryLocalization >
101- {
102- [ Field ]
103- public int OrderValue { get ; set ; }
104- [ Field ]
105- public bool Enabled { get ; set ; }
106-
107- // Localizable field. Note that it is non-persistent
108- public string Name
109- {
110- get => Localizations . Current . Name ;
111- set => Localizations . Current . Name = value ;
112- }
113-
114- [ Field ]
115- public LocalizationSet < CountryLocalization > Localizations { get ; private set ; }
116-
11746 public Country ( Session session ) : base ( session ) { }
11847 }
11948
12049 [ HierarchyRoot ]
121- public class CountryLocalization : Localization < Country >
50+ public class CountryLocalization : AbstractDictionaryLocalization < Country , CountryLocalization >
12251 {
123- [ Field ( Length = 100 ) ]
124- public string Name { get ; set ; }
12552 public CountryLocalization ( Session session , CultureInfo culture , Country target ) : base ( session , culture , target ) { }
12653 }
12754
128- [ HierarchyRoot ]
129- public class Color : Entity , ILocalizable < ColorLocalization >
130- {
131- [ Key , Field ]
132- public int Id { get ; set ; }
133-
134- [ Field ]
135- public int OrderValue { get ; set ; }
136- [ Field ]
137- public bool Enabled { get ; set ; }
138-
139- // Localizable field. Note that it is non-persistent
140- public string Name
141- {
142- get => Localizations . Current . Name ;
143- set => Localizations . Current . Name = value ;
144- }
145-
146- [ Field ]
147- public LocalizationSet < ColorLocalization > Localizations { get ; private set ; }
148-
149- public Color ( Session session ) : base ( session ) { }
150- }
151-
152- [ HierarchyRoot ]
153- public class ColorLocalization : Localization < Color >
154- {
155- [ Field ( Length = 100 ) ]
156- public string Name { get ; set ; }
157-
158- public ColorLocalization ( Session session , CultureInfo culture , Color target ) : base ( session , culture , target ) { }
159- }
16055}
0 commit comments