.NET Translator Implementation

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().

CultureInfoTranslator.cs
01/* Copyright (C) 2004 - 2007 db4objects Inc. http://www.db4o.com */ 02using System.Globalization; 03 04using Db4objects.Db4o; 05using Db4objects.Db4o.Config; 06 07namespace 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}
CultureInfoTranslator.vb
01' Copyright (C) 2004 - 2007 db4objects Inc. http://www.db4o.com 02Imports System.Globalization 03Imports Db4objects.Db4o 04Imports Db4objects.Db4o.Config 05 06Namespace 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 29End Namespace

Let's try it out:

TranslatorExample.cs: StoreWithTranslator
1public static void StoreWithTranslator() 2 { 3 IConfiguration configuration = Db4oFactory.NewConfiguration(); 4 configuration.ObjectClass(typeof(CultureInfo)) 5 .Translate(new CultureInfoTranslator()); 6 TryStoreAndRetrieve(configuration); 7 }
TranslatorExample.vb: StoreWithTranslator
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.