This topic applies to .NET version only.
To translate CultureInfo instances, we will store only their name since this is enough to recreate them
later. Note that we don't have to do any work in onActivate(), since object reinstantiation is already
fully completed in onInstantiate().
01/* Copyright (C) 2004 - 2007 db4objects Inc. http://www.db4o.com */ 02
using System.Globalization; 03
04
using Db4objects.Db4o; 05
using Db4objects.Db4o.Config; 06
07
namespace Db4objects.Db4odoc.Translators 08
{ 09
public class CultureInfoTranslator : IObjectConstructor 10
{ 11
public object OnStore(IObjectContainer container, object applicationObject) 12
{ 13
System.Console.WriteLine("onStore for {0}", applicationObject); 14
return ((CultureInfo)applicationObject).Name; 15
} 16
17
public object OnInstantiate(IObjectContainer container, object storedObject) 18
{ 19
System.Console.WriteLine("onInstantiate for {0}", storedObject); 20
string name = (string)storedObject; 21
return CultureInfo.CreateSpecificCulture(name); 22
} 23
24
public void OnActivate(IObjectContainer container, object applicationObject, object storedObject) 25
{ 26
System.Console.WriteLine("onActivate for {0}/{1}", applicationObject, storedObject); 27
} 28
29
IObjectTranslator Members 38
} 39
}
01' Copyright (C) 2004 - 2007 db4objects Inc. http://www.db4o.com 02
Imports System.Globalization 03
Imports Db4objects.Db4o 04
Imports Db4objects.Db4o.Config 05
06
Namespace Db4objects.Db4odoc.Translators 07
Public Class CultureInfoTranslator 08
Implements IObjectConstructor 09
Public Function OnStore(ByVal container As IObjectContainer, ByVal applicationObject As Object) As Object Implements IObjectConstructor.OnStore 10
System.Console.WriteLine("onStore for {0}", applicationObject) 11
Return (DirectCast(applicationObject, CultureInfo)).Name 12
End Function 13
14
Public Function OnInstantiate(ByVal container As IObjectContainer, ByVal storedObject As Object) As Object Implements IObjectConstructor.OnInstantiate 15
System.Console.WriteLine("onInstantiate for {0}", storedObject) 16
Dim name As String = DirectCast(storedObject, String) 17
Return CultureInfo.CreateSpecificCulture(name) 18
End Function 19
20
Public Sub OnActivate(ByVal container As IObjectContainer, ByVal applicationObject As Object, ByVal storedObject As Object) Implements IObjectConstructor.OnActivate 21
System.Console.WriteLine("onActivate for {0}/{1}", applicationObject, storedObject) 22
End Sub 23
24
Public Function StoredClass() As System.Type Implements IObjectConstructor.StoredClass 25
Return GetType(String) 26
End Function 27
28
End Class 29
End Namespace
Let's try it out:
1public static void StoreWithTranslator() 2
{ 3
IConfiguration configuration = Db4oFactory.NewConfiguration(); 4
configuration.ObjectClass(typeof(CultureInfo)) 5
.Translate(new CultureInfoTranslator()); 6
TryStoreAndRetrieve(configuration); 7
}
1Private Shared Sub StoreWithTranslator() 2
Dim configuration As IConfiguration = Db4oFactory.NewConfiguration() 3
configuration.ObjectClass(GetType(CultureInfo)).Translate(New CultureInfoTranslator()) 4
TryStoreAndRetrieve(configuration) 5
End Sub
ObjectTranslators let you reconfigure the state of a 'blank' application object reinstantiated by
db4o, ObjectConstructors also take care of instantiating the application object itself. ObjectTranslators and ObjectConstructors can be used for classes that cannot cleanly be stored and retrieved with db4o's standard object instantiation mechanisms.