Skip to content
Snippets Groups Projects
Commit ff4dea9d authored by Andreas Romeyke's avatar Andreas Romeyke
Browse files

- rewritten and simplified part handling purged / deleted entries in parse_iexml()

parent 7d536807
Branches
No related tags found
No related merge requests found
...@@ -453,7 +453,8 @@ sub check_if_db_conform ($string, $filename) { ...@@ -453,7 +453,8 @@ sub check_if_db_conform ($string, $filename) {
my $str_repid_old = "/mets:mets/mets:amdSec[starts-with(\@ID, \'REP\') and $str_local_reps]/\@ID"; my $str_repid_old = "/mets:mets/mets:amdSec[starts-with(\@ID, \'REP\') and $str_local_reps]/\@ID";
my $compiled_xpath_repid_old = XML::LibXML::XPathExpression->new($str_repid_old); my $compiled_xpath_repid_old = XML::LibXML::XPathExpression->new($str_repid_old);
# only event 272 or 274 should be used, next line uses a multiple-predicate hack for XPATH 1.0 # only event 272 or 274 should be used, next line uses a multiple-predicate hack for XPATH 1.0
my $xpath_if_purged_expr = 'mets:digiprovMD[@ID="ie-amd-digiprov"]/mets:mdWrap/mets:xmlData/dnx:dnx/dnx:section[@id="event"]/dnx:record[dnx:key[@id="eventIdentifierValue"][. >= 272][. != 273][. <= 274]]'; my $xpath_if_deleted_expr = 'mets:digiprovMD[@ID="ie-amd-digiprov"]/mets:mdWrap/mets:xmlData/dnx:dnx/dnx:section[@id="event"]/dnx:record[dnx:key[@id="eventIdentifierValue"][. = 272]]';
my $xpath_if_purged_expr = 'mets:digiprovMD[@ID="ie-amd-digiprov"]/mets:mdWrap/mets:xmlData/dnx:dnx/dnx:section[@id="event"]/dnx:record[dnx:key[@id="eventIdentifierValue"][. = 274]]';
my $compiled_xpath_ifpurged_event = XML::LibXML::XPathExpression->new('dnx:key[@id="eventDescription"]/text()'); my $compiled_xpath_ifpurged_event = XML::LibXML::XPathExpression->new('dnx:key[@id="eventDescription"]/text()');
my $compiled_xpath_purged_event_date = XML::LibXML::XPathExpression->new('dnx:key[@id="eventDateTime"]/text()'); my $compiled_xpath_purged_event_date = XML::LibXML::XPathExpression->new('dnx:key[@id="eventDateTime"]/text()');
my $compiled_xpath_purged_event_authorized_by = XML::LibXML::XPathExpression->new('dnx:key[@id="linkingAgentIdentifierValue1"]/text()'); my $compiled_xpath_purged_event_authorized_by = XML::LibXML::XPathExpression->new('dnx:key[@id="linkingAgentIdentifierValue1"]/text()');
...@@ -536,14 +537,14 @@ XPATH ...@@ -536,14 +537,14 @@ XPATH
} }
} }
sub get_purged_states($xp, $dnx) { sub get_purged_state($xp, $dnx) {
# we need to earch for eventIdentifierValue 272 or 274. # we need to earch for eventIdentifierValue 272 or 274.
# the eventDescription should be # the eventDescription should be
# a) IE has been deleted # a) IE has been deleted
# b) IE has been purged # b) IE has been purged
my @del_nodes = map {$_->nodeValue} $xp->findnodes($compiled_xpath_ifpurged_event, $dnx); my @del_nodes = map {$_->nodeValue} $xp->findnodes($compiled_xpath_ifpurged_event, $dnx);
my @states = map {$_ =~ s/^IE has been (deleted|purged)$/$1/; $_} @del_nodes; my @states = map {$_ =~ s/^IE has been (deleted|purged)$/$1/; $_} @del_nodes;
return \@states; return $states[0];
} }
sub has_purged_entries($xp, $dnx) { sub has_purged_entries($xp, $dnx) {
...@@ -645,30 +646,27 @@ sub parse_iexml($filename, $recovery_flag) { ...@@ -645,30 +646,27 @@ sub parse_iexml($filename, $recovery_flag) {
# get dc-records # get dc-records
$ret->{"dcrecords"} = get_dcrecords_ref($xp, $dmdsec); $ret->{"dcrecords"} = get_dcrecords_ref($xp, $dmdsec);
############################################ ############################################
my $dnx_ctx = $xp->findnodes($xpath_if_purged_expr, $amdsec_ie)->[0]; my $is_deleted;
my $is_deleted = has_purged_entries($xp, $dnx_ctx); foreach my $state (qw(purged deleted)) {
if ($is_deleted) { my $dnx_ctx;
my @purged_states = @{get_purged_states($xp, $dnx_ctx)}; if ($state eq 'purged') {
my $idx_purged; $dnx_ctx = $xp->findnodes($xpath_if_purged_expr, $amdsec_ie)->[0];
my $idx_deleted;
for (my $i = 0; $i <= $#purged_states; $i++) {
if ($purged_states[$i] eq 'purged') {$idx_purged = $i; last;}
elsif ($purged_states[$i] eq 'deleted') {$idx_deleted = $i;}
} }
if (defined $idx_purged) { else {
$ret->{purged}->{state} = "purged"; $dnx_ctx = $xp->findnodes($xpath_if_deleted_expr, $amdsec_ie)->[0];
$ret->{purged}->{reason} = get_purged_reasons($xp, $dnx_ctx)->[$idx_purged]; }
$ret->{purged}->{note} = get_purged_notes($xp, $dnx_ctx)->[$idx_purged]; $is_deleted = has_purged_entries($xp, $dnx_ctx);
$ret->{purged}->{date} = get_purged_dates($xp, $dnx_ctx)->[$idx_purged]; if ($is_deleted) {
$ret->{purged}->{authorized_by} = get_purged_authorized_by($xp, $dnx_ctx)->[$idx_purged]; my $purged_state = get_purged_state($xp, $dnx_ctx);
} else { $ret->{$state}->{state} = $purged_state;
$ret->{deleted}->{state} = "deleted"; $ret->{$state}->{reason} = get_purged_reasons($xp, $dnx_ctx)->[0];
$ret->{deleted}->{reason} = get_purged_reasons($xp, $dnx_ctx)->[$idx_deleted]; $ret->{$state}->{note} = get_purged_notes($xp, $dnx_ctx)->[0];
$ret->{deleted}->{note} = get_purged_notes($xp, $dnx_ctx)->[$idx_deleted]; $ret->{$state}->{date} = get_purged_dates($xp, $dnx_ctx)->[0];
$ret->{deleted}->{date} = get_purged_dates($xp, $dnx_ctx)->[$idx_deleted]; $ret->{$state}->{authorized_by} = get_purged_authorized_by($xp, $dnx_ctx)->[0];
$ret->{deleted}->{authorized_by} = get_purged_authorized_by($xp, $dnx_ctx)->[$idx_deleted]; if ($state eq "purged") {last;}
} }
} }
############################################ ############################################
# get right representation ID (has a dnx-section with <key id=label>LOCAL</key>) # get right representation ID (has a dnx-section with <key id=label>LOCAL</key>)
my $repid = get_repid($xp); my $repid = get_repid($xp);
...@@ -682,7 +680,9 @@ sub parse_iexml($filename, $recovery_flag) { ...@@ -682,7 +680,9 @@ sub parse_iexml($filename, $recovery_flag) {
} }
return $ret; return $ret;
} }
$ret->{"repid"} = $repid; $ret->{"repid"} = $repid;
############################################ ############################################
# get all files of LOCAL representation # get all files of LOCAL representation
my $filegrp = $xp->findnodes("mets:fileGrp[\@ADMID='$repid']", $filesec)->[0]; my $filegrp = $xp->findnodes("mets:fileGrp[\@ADMID='$repid']", $filesec)->[0];
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment