SYNOPSIS

   # you write an input/output driver
   # see for example TM::Synchronizable::MLDBM
   package My::WhatEver;

     # provides source_in and/or source_out methods
     sub source_in  { .... }

     sub source_out { .... }

     1;

   # you construct your map class
   package MySyncableMap;

     use TM;
     use base qw(TM);
     use Class::Trait qw(TM::ResourceAble TM::Synchronizable My::WhatEver);

     1;

   # you then use that
   my $tm = MySyncableMap (url => 'file:/where/ever');
   $tm->sync_in;
   # work with the map, etc...
   $tm->sync_out;

DESCRIPTION

This trait implements the abstract synchronization between in-memory topic maps and the resources which are attached to them, i.e. files, web pages, etc. whatever can be addressed via a \s-1URI\s0. Consequently, this trait inherits from TM::ResourceAble, although Class::Trait does not do this for you (sadly).

The trait provides the methods \*(C`sync_in\*(C' and \*(C`sync_out\*(C' to implement the synchronization. In this process it uses the timestamp of the map (\*(C`last_mod\*(C') and that of the resource \*(C`mtime\*(C'.

Unfortunately, the granularity of the two are different (at least on current \s-1UNIX\s0 systems): for the last modification time values from Time::HiRes is used. \s-1UNIX\s0 resources only use an integer.

Note: This needs a bit of consideration from the user's side.

INTERFACE

Methods

sync_in

$tm->sync_in This method provides only the main logic, whether a synchronisation from the resource into the in-memory map should occur. If the last modification date of the resource (\*(C`mtime\*(C') is more recent than that of the map (\*(C`last_mod\*(C'), then synchronisation from the resource to the in-memory map will be triggered. For this, a method \*(C`source_in\*(C' has to exist for the map object; that will be invoked. [Since \s-1TM\s0 1.53]: Any additional parameters are passed through to the underlying \*(C`source_in\*(C' method.

sync_out

$tm->sync_out This method provides the logic, whether synchronisation from the in-memory map towards the attached resource should occur or not. If the last modification date of the map (\*(C`last_mod\*(C') is more recent than that of the resource (\*(C`mtime\*(C'), then a method \*(C`source_out\*(C' for the object is triggered. [Since \s-1TM\s0 1.53]: Any additional parameters are passed through to the underlying \*(C`source_out\*(C' method.

RELATED TO TM::Synchronizable…

\s-1TM\s0, TM::ResourceAble

AUTHOR INFORMATION

Copyright 20(0[6]|10), Robert Barta <[email protected]>, All rights reserved.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. http://www.perl.com/perl/misc/Artistic.html