/usr/share/perl5/TM/Synchronizable.pm is in libtm-perl 1.56-7.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | package TM::Synchronizable;
use strict;
use warnings;
use Data::Dumper;
use Class::Trait 'base';
use Class::Trait 'TM::ResourceAble';
#use TM::ResourceAble;
#use base qw(TM::ResourceAble);
##our @REQUIRES = qw(source_in source_out);
=pod
=head1 NAME
TM::Synchronizable - Topic Maps, trait for synchronizable resources
=head1 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;
=head1 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 URI.
Consequently, this trait inherits from L<TM::ResourceAble>, although L<Class::Trait> does not do
this for you (sadly).
The trait provides the methods C<sync_in> and C<sync_out> to implement the synchronization. In this
process it uses the timestamp of the map (C<last_mod>) and that of the resource C<mtime>.
Unfortunately, the granularity of the two are different (at least on current UNIX systems): for the
I<last modification> time values from L<Time::HiRes> is used. UNIX resources only use an integer.
B<Note>: This needs a bit of consideration from the user's side.
=head1 INTERFACE
=head2 Methods
=over
=item B<sync_in>
I<$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>) is more recent
than that of the map (C<last_mod>), then synchronisation from the resource to the in-memory map will
be triggered. For this, a method C<source_in> has to exist for the map object; that will be invoked.
[Since TM 1.53]: Any additional parameters are passed through to the underlying C<source_in> method.
=cut
sub sync_in {
my $self = shift;
my $url = $self->url;
my $mtime=$self->mtime;
die "source '$url' is not accessible or does not exist.\n"
if (!defined $mtime);
$self->source_in (@_) if $self->last_mod # modification in map
< # earlier than
$mtime + 1; # modification of resource
}
=pod
=item B<sync_out>
I<$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>) is more recent
than that of the resource (C<mtime>), then a method C<source_out> for the object is triggered.
[Since TM 1.53]: Any additional parameters are passed through to the underlying C<source_out> method.
=cut
sub sync_out {
my $self = shift;
my $url = $self->url;
$self->source_out (@_) if $self->last_mod # map modification
> # later than
( $self->mtime || 0 ); # resource modification
}
=pod
=back
=head1 SEE ALSO
L<TM>, L<TM::ResourceAble>
=head1 AUTHOR INFORMATION
Copyright 20(0[6]|10), Robert Barta <drrho@cpan.org>, 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
=cut
our $VERSION = 0.3;
1;
__END__
|