source: LATMOS-Accounts/lib/LATMOS/Accounts/Bases.pm @ 7

Last change on this file since 7 was 7, checked in by nanardon, 15 years ago
  • add function to map canonical field name to internal db name
  • Property svn:keywords set to Id Rev
File size: 3.3 KB
Line 
1package LATMOS::Accounts::Bases;
2
3use 5.010000;
4use strict;
5use warnings;
6use LATMOS::Accounts::Bases::Objects;
7
8our $VERSION = (q$Rev$ =~ /^Rev: (\d+) /)[0];
9
10=head1 NAME
11
12LATMOS::Accounts::Bases - Base class for account data bases
13
14=head1 SYNOPSIS
15
16  use LATMOS::Accounts::Bases;
17  my $base = LATMOS::Accounts::Bases->new('type', %options);
18  ...
19
20=head1 DESCRIPTION
21
22This module provide basic functions for various account base
23
24=head1 FUNTIONS
25
26=cut
27
28=head2 new($type, %options)
29
30Return, if success, a new data base account object, $type is
31account base type, %options to setup the base.
32
33=cut
34
35sub new {
36    my ($class, $type, %options) = @_;
37
38    my $pclass = ucfirst(lc($type));
39    eval "require LATMOS::Accounts::Bases::$pclass;";
40    if ($@) { return } # error message ?
41    return "LATMOS::Accounts::Bases::$pclass"->new(%options);
42}
43
44sub _load_obj_class {
45    my ($self, $otype) = @_;
46
47    # finding perl class:
48    my $pclass = ref $self;
49    $pclass .= '::' . ucfirst(lc($otype));
50    eval "require $pclass;";
51    if ($@) { return } # error message ?
52    return $pclass;
53}
54
55=head2 list_canonicals_fields($otype)
56
57Return the list of supported fields by the database for object type $otype.
58
59=cut
60
61sub list_canonicals_fields {
62    my ($self, $otype) = @_;
63    my $pclass = $self->_load_obj_class($otype) or return;
64    $pclass->_canonical_fields;
65}
66
67=head2 get_field_name($otype, $c_fields)
68
69Return the internal fields name for $otype object for
70canonical fields $c_fields
71
72=cut
73
74sub get_field_name {
75    my ($self, $otype, $c_fields) = @_;
76    my $pclass = $self->_load_obj_class($otype) or return;
77    $pclass->_get_field_name($c_fields);
78}
79
80=head2 get_object($type, $id)
81
82Return an object of $type (typically user or group) having identifier
83$id.
84
85=cut
86
87sub get_object {
88    my ($self, $otype, $id) = @_;
89
90    return LATMOS::Accounts::Bases::Objects->new($self, $otype, $id);
91}
92
93=head2 load
94
95Make account base loading data into memory if need.
96Should always be called, if database fetch data on the fly
97(SQL, LDAP), the function just return True.
98
99=cut
100
101sub load { 1 }
102
103=head2 is_transactionnal
104
105Return True is the database support commit and rollback
106
107=cut
108
109sub is_transactionnal {
110    my ($self) = @_;
111    return($self->can('_rollback') && $self->can('_commit'));
112}
113
114=head2 commit
115
116Save change into the database if change are not done immediately.
117This should always be called as you don't know when change are applied.
118
119Return always true if database does not support any transaction.
120
121The driver should provides a _commit functions to save data.
122
123=cut
124
125sub commit {
126    my ($self) = @_;
127    return $self->can('_commit') ? $self->_commit : 1;
128}
129
130=head2 rollback
131
132If database support transaction, rollback changes. Return false
133if database does not support.
134
135If supported, driver should provides a _rollback functions
136
137=cut
138
139sub rollback {
140    my ($self) = @_;
141    return $self->can('_rollback') ? $self->_commit : 0;
142}
143
1441;
145
146__END__
147
148=head1 SEE ALSO
149
150=head1 AUTHOR
151
152Thauvin Olivier, E<lt>olivier.thauvin.ipsl.fr.thauvin@latmos.ipsl.fr<gt>
153
154=head1 COPYRIGHT AND LICENSE
155
156Copyright (C) 2009 by Thauvin Olivier
157
158This library is free software; you can redistribute it and/or modify
159it under the same terms as Perl itself, either Perl version 5.10.0 or,
160at your option, any later version of Perl 5 you may have available.
161
162=cut
Note: See TracBrowser for help on using the repository browser.