/[cvs]/nfo/perl/libs/Data/Transfer/Sync/Metadata.pm
ViewVC logotype

Contents of /nfo/perl/libs/Data/Transfer/Sync/Metadata.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations)
Mon Jan 20 16:58:46 2003 UTC (21 years, 5 months ago) by joko
Branch: MAIN
+ initial check-in: here they are....

1 ## $Id: API.pm,v 1.1 2003/01/19 01:23:04 joko Exp $
2 ##
3 ## Copyright (c) 2002 Andreas Motl <andreas.motl@ilo.de>
4 ##
5 ## See COPYRIGHT section in pod text below for usage and distribution rights.
6 ##
7 ## ----------------------------------------------------------------------------------------
8 ## $Log: API.pm,v $
9 ## Revision 1.1 2003/01/19 01:23:04 joko
10 ## + new from Data/Transfer/Sync.pm
11 ##
12 ## ----------------------------------------------------------------------------------------
13
14
15 package Data::Transfer::Sync::Metadata;
16
17 use strict;
18 use warnings;
19
20 use mixin::with qw( Data::Transfer::Sync );
21
22
23 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - main
24
25 # get logger instance
26 my $logger = Log::Dispatch::Config->instance;
27
28 use Data::Dumper;
29
30
31 sub _preCheckOptions {
32
33 my $self = shift;
34 my $opts = shift;
35
36 #print Dumper($opts);
37 #exit;
38
39 # the type of the to-be-synced item
40 if (!$opts->{source}->{nodeType}) {
41 $logger->error( __PACKAGE__ . "->_preCheckOptions failed: Please specify \"source-type\".");
42 return;
43 }
44 # the name of the (container-) node the items are listed in
45 if (!$opts->{source}->{nodeName}) {
46 $logger->error( __PACKAGE__ . "->_preCheckOptions failed: Please specify \"source-node\".");
47 return;
48 }
49
50 # a "map"-declaration which module to use for mapping- and/or lookup-purposes
51 if (!$opts->{map}) {
52 $logger->warning( __PACKAGE__ . "->_preCheckOptions: No mapping supplied - please check key 'map|mappings' in global configuration or specify additional argument '--mapping-module'.");
53 return;
54 }
55 if (!$opts->{map}->{moduleName}) {
56 $logger->warning( __PACKAGE__ . "->_preCheckOptions: Currently only perl-modules can provide mappings: Please specify one with '--mapping-module'.");
57 return;
58 }
59
60 return 1;
61
62 }
63
64 # TODO: refactor!!! take this list from already established/given metadata
65 sub _buildMetadataV1 {
66 my $self = shift;
67
68 # decompose identifiers for each partner
69 foreach ('source', 'target') {
70
71 # get/set metadata for further processing
72
73 # Partner and Node (e.g.: "L:Country" or "R:countries.csv")
74 if (my $item = $self->{args}->{$_}) {
75 my @item = split(':', $item);
76 $self->{meta}->{$_}->{dbkey} = $item[0];
77 $self->{meta}->{$_}->{node} = $item[1];
78 }
79
80 # Filter
81 if (my $item_filter = $self->{args}->{$_ . '_filter'}) {
82 $self->{meta}->{$_}->{filter} = $item_filter;
83 }
84
85 # IdentProvider
86 if (my $item_ident = $self->{args}->{$_ . '_ident'}) {
87 my @item_ident = split(':', $item_ident);
88 $self->{meta}->{$_}->{IdentProvider} = { method => $item_ident[0], arg => $item_ident[1] };
89 }
90
91 #print Dumper($self->{meta});
92
93 # TODO: ChecksumProvider
94
95 # exclude properties/subnodes
96 if (my $item_exclude = $self->{args}->{$_ . '_exclude'}) {
97 $self->{meta}->{$_}->{subnodes_exclude} = $item_exclude;
98 }
99
100 # TypeProvider
101 if (my $item_type = $self->{args}->{$_ . '_type'}) {
102 my @item_type = split(':', $item_type);
103 $self->{meta}->{$_}->{TypeProvider} = { method => $item_type[0], arg => $item_type[1] };
104 }
105
106 # Callbacks - writers (will be triggered _before_ writing to target)
107 if (my $item_writers = $self->{args}->{$_ . '_callbacks_write'}) {
108 my $descent = $_; # this is important since the following code inside the map wants to use its own context variables
109 map { $self->{meta}->{$descent}->{Callback}->{write}->{$_}++; } @$item_writers;
110 }
111
112 # Callbacks - readers (will be triggered _after_ reading from source)
113 if (my $item_readers = $self->{args}->{$_ . '_callbacks_read'}) {
114 my $descent = $_;
115 map { $self->{meta}->{$descent}->{Callback}->{read}->{$_}++; } @$item_readers;
116 }
117
118 # resolve storage objects
119 #$self->{$_} = $self->{container}->{storage}->{$self->{meta}->{$_}->{dbkey}};
120 # relink references to metainfo
121 $self->{meta}->{$_}->{storage} = $self->{container}->{storage}->{$self->{meta}->{$_}->{dbkey}};
122 #print "iiiiisprov: ", Dumper($self->{meta}->{$_}->{storage}), "\n";
123 }
124
125 }
126
127
128 # TODO: refactor (still)!!! take this list from already established/given metadata ....
129 # .... also internally: passing around and mungling these metadata doesn't make sense anymore.
130 sub _buildMetadataV2 {
131 my $self = shift;
132
133 #print Dumper($self->{options});
134
135 # decompose identifiers for each partner
136 foreach ('source', 'target') {
137
138 # get/set metadata for further processing
139
140 $self->{options}->{$_}->{dbKey} ||= '';
141 $self->{options}->{$_}->{nodeType} ||= '';
142 $self->{options}->{$_}->{nodeName} ||= '';
143
144 # Partner and Node (e.g.: "L:Country" or "R:countries.csv")
145 $self->{meta}->{$_}->{dbKey} = $self->{options}->{$_}->{dbKey};
146 $self->{meta}->{$_}->{nodeType} = $self->{options}->{$_}->{nodeType};
147 $self->{meta}->{$_}->{nodeName} = $self->{options}->{$_}->{nodeName};
148
149 # Filter
150 if (my $item_filter = $self->{args}->{$_ . '_filter'}) {
151 $self->{meta}->{$_}->{filter} = $item_filter;
152 }
153
154 # IdentProvider
155 if (my $item_ident = $self->{options}->{$_}->{ident}) {
156 my @item_ident = split(':', $item_ident);
157 $self->{meta}->{$_}->{IdentProvider} = { method => $item_ident[0], arg => $item_ident[1] };
158 }
159
160 # TODO: ChecksumProvider
161
162 # exclude properties/subnodes
163 if (my $item_exclude = $self->{options}->{$_}->{exclude}) {
164 $self->{meta}->{$_}->{subnodes_exclude} = $item_exclude;
165 }
166
167 # TypeProvider
168 if (my $item_type = $self->{args}->{$_ . '_type'}) {
169 my @item_type = split(':', $item_type);
170 $self->{meta}->{$_}->{TypeProvider} = { method => $item_type[0], arg => $item_type[1] };
171 }
172
173 # Callbacks - writers (will be triggered _before_ writing to target)
174 if (my $item_writers = $self->{args}->{$_ . '_callbacks_write'}) {
175 my $descent = $_; # this is important since the following code inside the map wants to use its own context variables
176 map { $self->{meta}->{$descent}->{Callback}->{write}->{$_}++; } @$item_writers;
177 }
178
179 # Callbacks - readers (will be triggered _after_ reading from source)
180 if (my $item_readers = $self->{args}->{$_ . '_callbacks_read'}) {
181 my $descent = $_;
182 map { $self->{meta}->{$descent}->{Callback}->{read}->{$_}++; } @$item_readers;
183 }
184
185 # resolve storage objects
186 $self->{meta}->{$_}->{storage} = $self->{options}->{$_}->{storage}->{handle};
187 }
188
189 #print Dumper($self->{meta});
190 return 1;
191
192 }
193
194
195 sub _buildFieldmappingV1 {
196 my $self = shift;
197
198 # build mapping
199 # incoming: and Array of node map entries (Array or Hash) - e.g.
200 # [ 'source:item_name' => 'target:class_val' ]
201 # { source => 'event->startDateTime', target => 'begindate' }
202 foreach (@{$self->{args}->{mapping}}) {
203 if (ref $_ eq 'ARRAY') {
204 my @entry1 = split(':', $_->[0]);
205 my @entry2 = split(':', $_->[1]);
206 my $descent = [];
207 my $node = [];
208 $descent->[0] = $entry1[0];
209 $descent->[1] = $entry2[0];
210 $node->[0] = $entry1[1];
211 $node->[1] = $entry2[1];
212 push @{$self->{meta}->{$descent->[0]}->{childnodes}}, $node->[0];
213 push @{$self->{meta}->{$descent->[1]}->{childnodes}}, $node->[1];
214 } elsif (ref $_ eq 'HASH') {
215 foreach my $entry_key (keys %$_) {
216 my $entry_val = $_->{$entry_key};
217 push @{$self->{meta}->{$entry_key}->{childnodes}}, $entry_val;
218 }
219 }
220
221 }
222
223 return 1;
224
225 }
226
227
228 1;

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed