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