package Equinox::Migration::MapDrivenMARCXMLProc;
+# Copyright 2009-2012, Equinox Software, Inc.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
use warnings;
use strict;
my $dstore;
my $sfmap;
-my @modlist = qw( multi ignoremulti bib required first concatenate );
+my @modlist = qw( multi ignoremulti bib required first concatenate parallel );
my %allmods = ();
my $multis = {};
+my $parallel_fields = {};
my $reccount;
my $verbose = 0;
$verbose = 1 if $args{verbose};
- my $self = bless { multis => \$multis,
+ my $self = bless {
+ multis => \$multis,
+ parallel_fields => \$parallel_fields,
}, $class;
# initialize map and taglist
my $fieldname = $sfmap->field($mappedtag, $mappedsub);
my $mods = $sfmap->mods($fieldname);
next if $mods->{multi};
- $crec->{tags}[-1]{uni}{$mappedsub} = '';
+ if ($mods->{parallel}) {
+ push @{ $crec->{tags}[-1]{parallel}{$mappedsub} }, '';
+ $crec->{tags}[-1]{uni} = undef;
+ } else {
+ $crec->{tags}[-1]{uni}{$mappedsub} = '';
+ $crec->{tags}[-1]{parallel} = undef;
+ }
$crec->{tags}[-1]{multi} = undef;
$crec->{tags}[-1]{tag} = $mappedtag;
}
return;
}
if ($sfmap->has($tag)) {
- push @{$crec->{tags}}, { tag => $tag, uni => undef, multi => undef };
+ push @{$crec->{tags}}, { tag => $tag, uni => undef, multi => undef, parallel => undef };
push @{$crec->{tmap}{$tag}}, (@{$crec->{tags}} - 1);
my @subs = $field->children('subfield');
for my $sub (@subs)
my $fieldname = $sfmap->field($tag, $mappedsub);
my $mods = $sfmap->mods($fieldname);
next if $mods->{multi};
- $crec->{tags}[-1]{uni}{$mappedsub} = ''
- unless defined $crec->{tags}[-1]{uni}{$mappedsub};
+ if ($mods->{parallel}) {
+ push @{ $crec->{tags}[-1]{parallel}{$mappedsub} }, ''
+ unless defined $crec->{tags}[-1]{parallel}{$mappedsub};
+ } else {
+ $crec->{tags}[-1]{uni}{$mappedsub} = ''
+ unless defined $crec->{tags}[-1]{uni}{$mappedsub};
+ }
}
}
}
return if ($sub->text =~ /$filter/i);
}
+ if ($mods->{parallel}) {
+ $parallel_fields->{$tag}{$code} = 1;
+ push @{$dataf->{parallel}{$code}}, $sub->text;
+ return;
+ }
+
# handle multi modifier
if ($mods->{multi}) {
$multis->{$tag}{$code} = 1;
return $multis;
}
+=head2 get_parallel_fields
+
+Returns hashref of C<{tag}{code}> for all mapped parallel fields
+
+=cut
+
+sub get_parallel_fields {
+ my ($self) = @_;
+ return $parallel_fields;
+}
+
=head1 MODIFIERS
MapDrivenMARCXMLProc implements the following modifiers, and passes