From 139567ce1b78980eb32b978bb312751fbf9be459 Mon Sep 17 00:00:00 2001 From: Andreas Romeyke <andreas.romeyke@slub-dresden.de> Date: Thu, 19 Sep 2024 20:51:17 +0200 Subject: [PATCH] - refactoring, extracted _handle_deleted_or_purged_aips() --- perl/exit_strategy.pl | 51 ++++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/perl/exit_strategy.pl b/perl/exit_strategy.pl index 8caa461..bde3b3e 100644 --- a/perl/exit_strategy.pl +++ b/perl/exit_strategy.pl @@ -423,6 +423,7 @@ sub check_if_db_conform ($string, $filename) { no_network => 1, recover => $recovery_flag, ); + return $parser; } } @@ -613,6 +614,31 @@ sub check_if_file_is_readable($filename) { return 1; } +sub _handle_deleted_or_purged_aips($xp, $ret) { + my $amdsec_ie = $xp->findnodes($compiled_xpath_amdSec_ie)->[0]; + my $is_deleted; + foreach my $state (qw(purged deleted)) { + my $dnx_ctx; + if ($state eq 'purged') { + $dnx_ctx = $xp->findnodes($xpath_if_purged_expr, $amdsec_ie)->[0]; + } + else { + $dnx_ctx = $xp->findnodes($xpath_if_deleted_expr, $amdsec_ie)->[0]; + } + $is_deleted = has_purged_entries($xp, $dnx_ctx); + if ($is_deleted) { + my $purged_state = get_purged_state($xp, $dnx_ctx); + $ret->{$state}->{state} = $purged_state; + $ret->{$state}->{reason} = get_purged_reasons($xp, $dnx_ctx)->[0]; + $ret->{$state}->{note} = get_purged_notes($xp, $dnx_ctx)->[0]; + $ret->{$state}->{date} = get_purged_dates($xp, $dnx_ctx)->[0]; + $ret->{$state}->{authorized_by} = get_purged_authorized_by($xp, $dnx_ctx)->[0]; + if ($state eq "purged") {last;} + } + } + return $is_deleted; +} + sub parse_iexml($filename, $recovery_flag) { my $retry = 3; while ($retry > 0) { @@ -635,7 +661,7 @@ sub parse_iexml($filename, $recovery_flag) { $xp->setContextNode($dom); my $dmdsec = $xp->findnodes($compiled_xpath_dmdSec)->[0]; #my $amdsec_rep = $xp->findnodes($compiled_xpath_amdSec_rep)->[0]; - my $amdsec_ie = $xp->findnodes($compiled_xpath_amdSec_ie)->[0]; + my $filesec = $xp->findnodes($compiled_xpath_fileSec)->[0]; my $ret; $ret->{"filename"} = $filename; @@ -646,27 +672,7 @@ sub parse_iexml($filename, $recovery_flag) { # get dc-records $ret->{"dcrecords"} = get_dcrecords_ref($xp, $dmdsec); ############################################ - my $is_deleted; - foreach my $state (qw(purged deleted)) { - my $dnx_ctx; - if ($state eq 'purged') { - $dnx_ctx = $xp->findnodes($xpath_if_purged_expr, $amdsec_ie)->[0]; - } - else { - $dnx_ctx = $xp->findnodes($xpath_if_deleted_expr, $amdsec_ie)->[0]; - } - $is_deleted = has_purged_entries($xp, $dnx_ctx); - if ($is_deleted) { - my $purged_state = get_purged_state($xp, $dnx_ctx); - $ret->{$state}->{state} = $purged_state; - $ret->{$state}->{reason} = get_purged_reasons($xp, $dnx_ctx)->[0]; - $ret->{$state}->{note} = get_purged_notes($xp, $dnx_ctx)->[0]; - $ret->{$state}->{date} = get_purged_dates($xp, $dnx_ctx)->[0]; - $ret->{$state}->{authorized_by} = get_purged_authorized_by($xp, $dnx_ctx)->[0]; - if ($state eq "purged") {last;} - } - } - + my $is_deleted = _handle_deleted_or_purged_aips($xp, $ret); ############################################ # get right representation ID (has a dnx-section with <key id=label>LOCAL</key>) my $repid = get_repid($xp); @@ -706,6 +712,7 @@ sub parse_iexml($filename, $recovery_flag) { return $ret; } + return; } -- GitLab