1 |
package Torus::Core; |
package Torus::Core; |
2 |
|
|
3 |
require Exporter; |
use base qw( |
4 |
our @ISA = qw(Exporter); |
DesignPattern::Object |
5 |
our @EXPORT = qw( ); |
DesignPattern::Object::Logger |
6 |
|
); |
7 |
|
|
8 |
use strict; |
use strict; |
9 |
use warnings; |
use warnings; |
10 |
|
|
11 |
use loadConfig; |
use loadConfig; |
12 |
use Torus::Driver::ldap; |
#use Torus::Driver::ldap; |
13 |
|
use Data::Transfer::Sync; |
14 |
|
|
15 |
|
my $logger = Log::Dispatch::Config->instance; |
16 |
|
|
17 |
|
|
18 |
my $DEBUGLEVEL = $config->get("debug_level"); |
my $DEBUGLEVEL = $config->get("debug_level"); |
19 |
my $TRACELEVEL = $config->get("trace_level"); |
my $TRACELEVEL = $config->get("trace_level"); |
53 |
|
|
54 |
} |
} |
55 |
|
|
56 |
|
sub startSync { |
57 |
|
|
58 |
|
my $self = shift; |
59 |
|
my $opts = shift; |
60 |
|
|
61 |
|
my $ldapLocator = Data::Storage::Locator->new( |
62 |
|
ldap => { |
63 |
|
type => "NetLDAP", |
64 |
|
# dsn => "ldap:host=192.168.1.56;binddn='cn=root, dc=labnet, dc=de';pass=Geheim", |
65 |
|
dsn => "ldap:host=192.168.10.150;binddn='cn=root, o=netfrag.org, c=de';pass=secret", |
66 |
|
#schema => 'BizWorks::BackendDbSchema', |
67 |
|
#classnames => [qw( SystemEvent LangText )], |
68 |
|
#classnames => [qw( SystemEvent Person Address LangText )], |
69 |
|
#test_availability => 1, |
70 |
|
#test_integrity => 1, |
71 |
|
#test_emptyness => 1, |
72 |
|
# TODO: re-enable this! (multiple-target-logging!) |
73 |
|
#logger => 1, |
74 |
|
want_transactions => 0, |
75 |
|
syncable => 1, |
76 |
|
}, |
77 |
|
); |
78 |
|
my $ldapStorage = Data::Storage->new($ldapLocator); |
79 |
|
$ldapStorage->connect(); |
80 |
|
|
81 |
|
my $mapiStorage; |
82 |
|
|
83 |
|
|
84 |
|
# create a new synchronization object |
85 |
|
my $sync = Data::Transfer::Sync->new(); |
86 |
|
|
87 |
|
|
88 |
|
# resolve mapping metadata for syncing requested resource |
89 |
|
# if now mapping is given explicitely, try to use mapping named like "target" |
90 |
|
$opts->{mapping} ||= $opts->{target}; |
91 |
|
# was: ($nodemapping and $propmapping were package-globals) |
92 |
|
# is: (both mappings are retrieved from mapping-module/package/object |
93 |
|
# resolve mapping module |
94 |
|
my $modulename = $self->{config}->{mappings}->{$opts->{mapping}}; |
95 |
|
$opts->{mapping_module} = $modulename; |
96 |
|
|
97 |
|
#print Dumper($opts); |
98 |
|
|
99 |
|
# mungle & check the options |
100 |
|
# TODO: refactor this and the innards..... |
101 |
|
|
102 |
|
#$opts = $sync->prepareSyncOptions($opts); |
103 |
|
if (!$sync->prepareOptions($opts)) { |
104 |
|
$logger->critical( __PACKAGE__ . "->startSync: 'Data::Transfer::Sync::prepareSyncOptions' failed."); |
105 |
|
} |
106 |
|
|
107 |
|
#print Dumper($opts); |
108 |
|
|
109 |
|
if (!$sync->checkOptions($opts)) { |
110 |
|
$logger->critical( __PACKAGE__ . "->startSync: 'Data::Transfer::Sync::checkOptions' failed."); |
111 |
|
return; |
112 |
|
} |
113 |
|
|
114 |
|
# branch to execution path for special targets |
115 |
|
# detect for option 'handler' which could be a CODEref |
116 |
|
if ($opts->{handler} && ref $opts->{handler} eq 'CODE') { |
117 |
|
$logger->info( __PACKAGE__ . "->startSync: Running (special handler code - no generic sync!) on '$opts->{target}' with MODE $opts->{mode}, NODE $opts->{target_node}"); |
118 |
|
$opts->{handler}->($self, $opts); |
119 |
|
return; |
120 |
|
} |
121 |
|
|
122 |
|
# determine write-protection(s) from options |
123 |
|
my @write_protects; |
124 |
|
push @write_protects, 'L' if $opts->{source_write_protect}; |
125 |
|
push @write_protects, 'R' if $opts->{target_write_protect}; |
126 |
|
|
127 |
|
# configure synchronization-object |
128 |
|
$sync->configure( |
129 |
|
storages => { |
130 |
|
#L => $self->{bizWorks}->{$opts->{source}}, |
131 |
|
L => $mapiStorage, |
132 |
|
#R => $self->{bizWorks}->{$opts->{target}}, |
133 |
|
R => $ldapStorage, |
134 |
|
}, |
135 |
|
id_authorities => [qw( L ) ], |
136 |
|
checksum_authorities => [qw( L ) ], |
137 |
|
write_protected => \@write_protects, |
138 |
|
verbose => 1, |
139 |
|
); |
140 |
|
|
141 |
|
# patch options |
142 |
|
$opts->{source} = "L:$opts->{source_node}" if $opts->{source_node}; |
143 |
|
$opts->{target} = "R:$opts->{target_node}" if $opts->{target_node}; |
144 |
|
|
145 |
|
#print Dumper($opts); |
146 |
|
|
147 |
|
$sync->syncNodes($opts); |
148 |
|
|
149 |
|
} |
150 |
|
|
151 |
1; |
1; |