Show
Ignore:
Timestamp:
20.02.2012 15:14:01 (8 years ago)
Author:
sjm84
Message:

More changes to metadataaction as well as sorting the keys when printing

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone2/perllib/cgiactions/metadataaction.pm

    r24950 r25097  
    4141} 
    4242 
    43  
    4443@metadataaction::ISA = ('baseaction'); 
    4544 
    46  
    4745my $action_table = 
    48 {  
    49     "get-live-metadata"     => { 'compulsory-args' => [ "d", "metaname" ], 
    50                      'optional-args'   => [] },  
    51  
    52     "get-metadata"          => { 'compulsory-args' => [ "d", "metaname" ], 
    53                      'optional-args'   => [ "metapos" ] },  
    54  
    55     "set-live-metadata"     => { 'compulsory-args' => [ "d", "metaname", "metavalue" ], 
    56                      'optional-args'   => [ ] }, 
    57  
    58     "set-metadata"          => { 'compulsory-args' => [ "d", "metaname", "metavalue" ], 
    59                      'optional-args'   => [ "metapos" ] }, 
    60  
    61     "set-metadata-array"     => { 'compulsory-args' => [ "json" ], 
    62                      'optional-args'   => [ ] }, 
     46{ 
     47    #GET METHODS 
     48    "get-import-metadata" => {  
     49        'compulsory-args' => [ "d", "metaname" ], 
     50        'optional-args'   => [ ] }, 
     51 
     52    "get-archives-metadata" => {  
     53        'compulsory-args' => [ "d", "metaname" ], 
     54        'optional-args'   => [ "metapos" ] }, 
     55     
     56    "get-metadata" => {  
     57        'compulsory-args' => [ "d", "metaname" ], 
     58        'optional-args'   => [ "metapos" ] },  
     59 
     60    "get-live-metadata" => {  
     61        'compulsory-args' => [ "d", "metaname" ], 
     62        'optional-args'   => [ ] },  
     63 
     64    #SET METHODS 
     65    "set-live-metadata" => {  
     66        'compulsory-args' => [ "d", "metaname", "metavalue" ], 
     67        'optional-args'   => [ ] }, 
     68 
     69    "set-metadata" => {  
     70        'compulsory-args' => [ "d", "metaname", "metavalue" ], 
     71        'optional-args'   => [ "metapos" ] }, 
     72 
     73    "set-archives-metadata" => {  
     74        'compulsory-args' => [ "d", "metaname", "metavalue" ], 
     75        'optional-args'   => [ "metapos", "metamode", "prevmetavalue" ] }, # metamode can be "accumulate", "override", 
     76     
     77    "set-import-metadata" => {  
     78        'compulsory-args' => [ "metaname", "metavalue" ], 
     79        'optional-args'   => [ "d", "f", "metamode" ] }, # metamode can be "accumulate", "override", or "unique-id". Also need to add the ability to specify a previous metadata value to overwrite (because we can't use metapos) 
     80                  
     81    #SET METHODS (ARRAY) 
     82    "set-metadata-array" => {  
     83        'compulsory-args' => [ "json" ], 
     84        'optional-args'   => [ ] }, 
    6385                      
    64     "set-archives-metadata" => { 'compulsory-args' => [ "d", "metaname", "metavalue" ], 
    65                      'optional-args'   => [ "metapos", "metamode" ] 
    66                       # metamode can be "accumulate", "override", 
    67                 }, 
    68  
    69     "set-archives-metadata-array" => { 'compulsory-args' => [ "json" ], 
    70                      'optional-args'   => [ "metamode" ] 
    71                 }, 
    72                  
    73     "set-import-metadata"   => { 'compulsory-args' => [ "metaname", "metavalue" ], 
    74                      'optional-args'   => [ "d", "f", "metamode" ] # Need to add the ability to specify a previous metadata value to overwrite (because we can't use metapos) 
    75                     # metamode can be "accumulate", "override", or "unique-id" 
    76                  }, 
    77  
    78     "remove-import-metadata" => { 'compulsory-args' => [ "d", "metaname", "metavalue" ], #TODO: add f argument 
    79                      'optional-args'   => [ ] }, 
     86    "set-archives-metadata-array" => {  
     87        'compulsory-args' => [ "json" ], 
     88        'optional-args'   => [ ] }, 
     89         
     90    "set-import-metadata-array" => { 
     91        'compulsory-args' => [ "json" ], 
     92        'optional-args'   => [ ] }, 
     93         
     94    #REMOVE METHODS 
     95    "remove-import-metadata" => {  
     96        'compulsory-args' => [ "d", "metaname", "metavalue" ], #TODO: add f argument 
     97        'optional-args'   => [ ] }, 
    8098                      
    81     "remove-archives-metadata" => { 'compulsory-args' => [ "d", "metaname" ], #TODO: add f argument 
    82                      'optional-args'   => [ "metapos", "metavalue" ] }, 
    83  
    84     "remove-live-metadata"  => { 'compulsory-args' => [ "d", "metaname" ], 
    85                      'optional-args'   => [ ] }, 
    86  
    87     "remove-metadata"       => { 'compulsory-args' => [ "d", "metaname" ], 
    88                      'optional-args'   => [ "metapos", "metavalue" ] }, 
    89  
    90     "insert-metadata"       => { 'compulsory-args' => [ "d", "metaname", "metavalue" ], 
    91                      'optional-args'   => [ ] 
    92                    } 
     99    "remove-archives-metadata" => {  
     100        'compulsory-args' => [ "d", "metaname" ], #TODO: add f argument 
     101        'optional-args'   => [ "metapos", "metavalue" ] }, 
     102 
     103    "remove-live-metadata" => { 
     104        'compulsory-args' => [ "d", "metaname" ], 
     105        'optional-args'   => [ ] }, 
     106 
     107    "remove-metadata" => { 
     108        'compulsory-args' => [ "d", "metaname" ], 
     109        'optional-args'   => [ "metapos", "metavalue" ] }, 
     110 
     111    #INSERT METHODS 
     112    "insert-metadata" => {  
     113        'compulsory-args' => [ "d", "metaname", "metavalue" ], 
     114        'optional-args'   => [ ] } 
    93115}; 
    94116 
     
    242264 
    243265 
     266sub get_import_metadata 
     267{ 
     268    my $self = shift @_; 
     269 
     270    my $username  = $self->{'username'}; 
     271    my $collect   = $self->{'collect'}; 
     272    my $gsdl_cgi  = $self->{'gsdl_cgi'}; 
     273    my $gsdlhome  = $self->{'gsdlhome'}; 
     274 
     275    # Authenticate user if it is enabled 
     276    if ($baseaction::authentication_enabled) { 
     277        # Ensure the user is allowed to edit this collection 
     278        &authenticate_user($gsdl_cgi, $username, $collect); 
     279    } 
     280 
     281    # Obtain the collect dir 
     282    my $site = $self->{'site'}; 
     283    my $collect_dir = $gsdl_cgi->get_collection_dir($site); 
     284    ##my $collect_dir = &util::filename_cat($gsdlhome, "collect"); 
     285 
     286    # Make sure the collection isn't locked by someone else 
     287    $self->lock_collection($username, $collect); 
     288 
     289    # look up additional args 
     290    my $docid     = $self->{'d'}; 
     291    my $metaname  = $self->{'metaname'}; 
     292    my $infodbtype = $self->{'infodbtype'}; 
     293    if (!defined $docid)  
     294    { 
     295        $gsdl_cgi->generate_error_message("No docid (d=...) specified.\n"); 
     296    }  
     297 
     298    # Obtain where the metadata.xml is from the archiveinfo-doc.gdb file 
     299    # If the doc oid is not specified, we assume the metadata.xml is next to the specified "f" 
     300    my $metadata_xml_file; 
     301    my $import_filename = undef; 
     302     
     303 
     304    my $archive_dir = &util::filename_cat($collect_dir, $collect, "archives"); 
     305    my $arcinfo_doc_filename = &dbutil::get_infodb_file_path($infodbtype, "archiveinf-doc", $archive_dir); 
     306    my $doc_rec = &dbutil::read_infodb_entry($infodbtype, $arcinfo_doc_filename, $docid); 
     307 
     308    # This now stores the full pathname 
     309    $import_filename = $doc_rec->{'src-file'}->[0]; 
     310 
     311    # figure out correct metadata.xml file [?] 
     312    # Assuming the metadata.xml file is next to the source file 
     313    # Note: This will not work if it is using the inherited metadata from the parent folder 
     314    my ($import_tailname, $import_dirname) = File::Basename::fileparse($import_filename); 
     315    my $metadata_xml_filename = &util::filename_cat($import_dirname, "metadata.xml"); 
     316 
     317    $gsdl_cgi->generate_ok_message($self->get_metadata_from_metadata_xml($gsdl_cgi, $metadata_xml_filename, $metaname, $import_tailname)); 
     318 
     319    # Release the lock once it is done 
     320    $self->unlock_collection($username, $collect); 
     321} 
     322 
     323sub get_metadata_from_metadata_xml 
     324{ 
     325    my $self = shift @_; 
     326    my ($gsdl_cgi, $metadata_xml_filename, $metaname, $src_file) = @_; 
     327     
     328    my @rules =  
     329    (  
     330        _default => 'raw', 
     331        'Metadata' => \&gfmxml_metadata, 
     332        'FileName' => \&mxml_filename 
     333    ); 
     334         
     335    my $parser = XML::Rules->new 
     336    ( 
     337        rules => \@rules, 
     338        output_encoding => 'utf8' 
     339    ); 
     340     
     341    my $xml_in = ""; 
     342    if (!open(MIN,"<$metadata_xml_filename"))  
     343    { 
     344        $gsdl_cgi->generate_error("Unable to read in $metadata_xml_filename: $!"); 
     345    } 
     346    else  
     347    { 
     348        # Read them in 
     349        my $line; 
     350        while (defined ($line=<MIN>)) { 
     351            $xml_in .= $line; 
     352        } 
     353        close(MIN);  
     354 
     355        $parser->parse($xml_in, {metaname => $metaname, src_file => $src_file}); 
     356         
     357        if(defined $parser->{'pad'}->{'metavalue'}) 
     358        { 
     359            return $parser->{'pad'}->{'metavalue'}; 
     360        } 
     361        else 
     362        { 
     363            return ""; 
     364        } 
     365    } 
     366} 
     367 
     368sub gfmxml_metadata 
     369{ 
     370    my ($tagname, $attrHash, $contextArray, $parentDataArray, $parser) = @_; 
     371 
     372    if (($parser->{'parameters'}->{'src_file'} eq $parser->{'parameters'}->{'current_file'}) && ($attrHash->{'name'} eq $parser->{'parameters'}->{'metaname'})) 
     373    { 
     374        $parser->{'pad'}->{'metavalue'} = $attrHash->{'_content'}; 
     375    } 
     376} 
     377 
     378sub get_archives_metadata 
     379{ 
     380    my $self = shift @_; 
     381 
     382    my $username  = $self->{'username'}; 
     383    my $collect   = $self->{'collect'}; 
     384    my $gsdl_cgi  = $self->{'gsdl_cgi'}; 
     385    my $gsdlhome  = $self->{'gsdlhome'}; 
     386    my $infodbtype = $self->{'infodbtype'}; 
     387 
     388    # Authenticate user if it is enabled 
     389    if ($baseaction::authentication_enabled) { 
     390        # Ensure the user is allowed to edit this collection 
     391        &authenticate_user($gsdl_cgi, $username, $collect); 
     392    } 
     393 
     394    # Obtain the collect dir 
     395    my $site = $self->{'site'}; 
     396    my $collect_dir = $gsdl_cgi->get_collection_dir($site); 
     397     
     398    my $archive_dir = &util::filename_cat($collect_dir, $collect, "archives"); 
     399 
     400    # Make sure the collection isn't locked by someone else 
     401    $self->lock_collection($username, $collect); 
     402     
     403    # look up additional args 
     404    my ($docid, $docid_secnum) = ($self->{'d'} =~ m/^(.*?)(\..*)?$/); 
     405    $docid_secnum = "" if (!defined $docid_secnum); 
     406     
     407    my $metaname = $self->{'metaname'}; 
     408    my $metapos = $self->{'metapos'}; 
     409    $metapos = 0 if (!defined $metapos); 
     410     
     411    my $arcinfo_doc_filename = &dbutil::get_infodb_file_path($infodbtype, "archiveinf-doc", $archive_dir); 
     412    my $doc_rec = &dbutil::read_infodb_entry($infodbtype, $arcinfo_doc_filename, $docid); 
     413 
     414    # This now stores the full pathname 
     415    my $doc_filename = $doc_rec->{'doc-file'}->[0];  
     416 
     417    $gsdl_cgi->generate_ok_message($self->get_metadata_from_archive_xml($gsdl_cgi, &util::filename_cat($archive_dir, $doc_filename), $metaname, $metapos, $docid_secnum)); 
     418 
     419    # Release the lock once it is done 
     420    $self->unlock_collection($username, $collect); 
     421} 
     422 
     423sub get_metadata_from_archive_xml 
     424{ 
     425    my $self = shift @_; 
     426    my ($gsdl_cgi, $doc_xml_filename, $metaname, $metapos, $secid) = @_; 
     427     
     428    my @start_rules = ('Section' => \&dxml_start_section); 
     429     
     430    my @rules =  
     431    (  
     432        _default => 'raw', 
     433        'Metadata' => \&gfdxml_metadata 
     434    ); 
     435         
     436    my $parser = XML::Rules->new 
     437    ( 
     438        start_rules => \@start_rules, 
     439        rules => \@rules, 
     440        output_encoding => 'utf8' 
     441    ); 
     442     
     443    my $xml_in = ""; 
     444    if (!open(MIN,"<$doc_xml_filename"))  
     445    { 
     446        $gsdl_cgi->generate_error("Unable to read in $doc_xml_filename: $!"); 
     447    } 
     448    else  
     449    { 
     450        # Read them in 
     451        my $line; 
     452        while (defined ($line=<MIN>)) { 
     453            $xml_in .= $line; 
     454        } 
     455        close(MIN);  
     456 
     457        $parser->parse($xml_in, {metaname => $metaname, metapos => $metapos, secid => $secid}); 
     458         
     459        if(defined $parser->{'pad'}->{'metavalue'}) 
     460        { 
     461            return $parser->{'pad'}->{'metavalue'}; 
     462        } 
     463        else 
     464        { 
     465            return ""; 
     466        } 
     467    } 
     468} 
     469 
     470sub gfdxml_metadata 
     471{ 
     472    my ($tagname, $attrHash, $contextArray, $parentDataArray, $parser) = @_; 
     473     
     474    if(!($parser->{'parameters'}->{'secid'} eq $parser->{'parameters'}->{'curr_section_num'})) 
     475    { 
     476        return; 
     477    } 
     478 
     479    if ($parser->{'parameters'}->{'metaname'} eq $attrHash->{'name'}) 
     480    { 
     481        if (!defined $parser->{'parameters'}->{'poscount'}) 
     482        { 
     483            $parser->{'parameters'}->{'poscount'} = 0; 
     484        } 
     485        else 
     486        { 
     487            $parser->{'parameters'}->{'poscount'}++; 
     488        } 
     489    } 
     490 
     491    if (($parser->{'parameters'}->{'metaname'} eq $attrHash->{'name'}) && ($parser->{'parameters'}->{'poscount'} == $parser->{'parameters'}->{'metapos'})) 
     492    {    
     493        $parser->{'pad'}->{'metavalue'} = $attrHash->{'_content'}; 
     494    } 
     495} 
     496 
    244497sub set_live_metadata 
    245498{ 
     
    394647    $self->unlock_collection($username, $collect); 
    395648} 
    396  
    397  
    398649 
    399650 
     
    471722 
    472723 
    473  
    474724sub dxml_metadata 
    475725{ 
     
    491741##    print STDERR "**** metamode = $metamode\n"; 
    492742     
    493     if ((!defined $opt_doc_secnum) || ($opt_doc_secnum eq $curr_secnum)) { 
    494     my $name_attr = $attrHash->{'name'}; 
    495     if (($name_attr eq $metaname) && ($metamode eq "override")) { 
    496 ##      print STDERR "**** got match!!\n"; 
    497         # Get the value and override the current value 
    498         my $metavalue = $parser->{'parameters'}->{'metavalue'}; 
    499         $attrHash->{'_content'} = $metavalue; 
    500          
    501         # Don't want it to wipe out any other pieces of metadata 
    502         $parser->{'parameters'}->{'metamode'} = "done"; 
    503     } 
     743    if ((!defined $opt_doc_secnum) || ($opt_doc_secnum eq $curr_secnum))  
     744    { 
     745        my $name_attr = $attrHash->{'name'}; 
     746        if (($name_attr eq $metaname) && ($metamode eq "override"))  
     747        { 
     748            if (!defined $parser->{'parameters'}->{'poscount'})  
     749            {  
     750                $parser->{'parameters'}->{'poscount'} = 0;  
     751            }  
     752            else  
     753            {  
     754                $parser->{'parameters'}->{'poscount'}++;  
     755            }  
     756             
     757            if(defined $parser->{'parameters'}->{'metapos'} && $parser->{'parameters'}->{'poscount'} == $parser->{'parameters'}->{'metapos'}) 
     758            { 
     759                ##print STDERR "**** got match!!\n"; 
     760                # Get the value and override the current value 
     761                my $metavalue = $parser->{'parameters'}->{'metavalue'}; 
     762                $attrHash->{'_content'} = $metavalue; 
     763                 
     764                # Don't want it to wipe out any other pieces of metadata 
     765                $parser->{'parameters'}->{'metamode'} = "done"; 
     766            } 
     767            else if(defined $parser->{'parameters'}->{'prevmetavalue'} && $parser->{'parameters'}->{'prevmetavalue'} == $attrHash->{'_content'}) 
     768            { 
     769                $attrHash->{'_content'} = $metavalue; 
     770                $parser->{'parameters'}->{'metamode'} = "done"; 
     771            } 
     772        } 
    504773    } 
    505774 
     
    544813 
    545814 
    546  
    547815sub dxml_start_section 
    548816{ 
     
    581849    $parser->{'parameters'}->{'curr_section_num'}   = $new_secnum; 
    582850 
    583     print STDERR "*** In Section: $new_secnum\n"; 
     851    ##print STDERR "*** In Section: $new_secnum\n"; 
    584852} 
    585853 
     
    625893} 
    626894 
    627  
    628895sub edit_doc_xml 
    629896{ 
    630897    my $self = shift @_; 
    631     my ($gsdl_cgi, $doc_xml_filename, $metaname, $metavalue, $metapos, $metamode, $opt_secnum) = @_; 
     898    my ($gsdl_cgi, $doc_xml_filename, $metaname, $metavalue, $metapos, $metamode, $opt_secnum, $prevmetavalue) = @_; 
    632899 
    633900    # To monitor which section/subsection number we are in 
     
    646913            'metapos'   => $metapos, 
    647914            'metavalue' => $metavalue, 
    648             'metamode'  => $metamode }; 
     915            'metamode'  => $metamode, 
     916            'prevmetavalue' => $prevmetavalue }; 
    649917             
    650918    if (defined $opt_secnum) { 
     
    658926{ 
    659927    my $self = shift @_; 
    660     my ($gsdl_cgi,$archive_dir, $collect_dir,$collect, $infodbtype,$docid,$metaname,$metapos,$metavalue,$metamode) = @_; 
     928    my ($gsdl_cgi,$archive_dir, $collect_dir,$collect, $infodbtype,$docid,$metaname,$metapos,$metavalue,$metamode,$prevmetavalue) = @_; 
    661929     
    662930    # Obtain the doc.xml path for the specified docID 
     
    676944    # Running import.pl -groupsize will cause this to have multiple sections in one doc.xml 
    677945     
    678     print STDERR "** away to call edit_doc_xml\n"; 
    679      
    680946    $self->edit_doc_xml($gsdl_cgi,$doc_xml_filename, 
    681             $metaname,$metavalue,$metapos,$metamode,$docid_secnum); 
    682              
    683     print STDERR "*** finished edit_doc_xml\n"; 
     947            $metaname,$metavalue,$metapos,$metamode,$docid_secnum,$prevmetavalue); 
    684948     
    685949    return 0; # return 0 for now to indicate no error 
     
    717981    my $metaname   = $self->{'metaname'}; 
    718982    my $metavalue  = $self->{'metavalue'}; 
     983    my $prevmetavalue = $self->{'prevmetavalue'} 
    719984     
    720985    my $metapos    = $self->{'metapos'}; 
     
    729994     
    730995    my $status = $self->set_archives_metadata_entry($gsdl_cgi,$archive_dir, $collect_dir,$collect, $infodbtype,$docid, 
    731                 $metaname,$metapos,$metavalue,$metamode); 
     996                $metaname,$metapos,$metavalue,$metamode,$prevmetavalue); 
    732997    
    733998    # Release the lock once it is done 
     
    8761141 
    8771142    # This now stores the full pathname 
    878     my $import_filename = $doc_rec->{'doc-file'}->[0];   
    879  
    880     my $status = $self->remove_from_doc_xml($gsdl_cgi, &util::filename_cat($archive_dir, $import_filename), $metaname, $metapos, undef, $docid_secnum); 
     1143    my $doc_filename = $doc_rec->{'doc-file'}->[0];  
     1144 
     1145    my $status = $self->remove_from_doc_xml($gsdl_cgi, &util::filename_cat($archive_dir, $doc_filename), $metaname, $metapos, undef, $docid_secnum); 
    8811146     
    8821147    # Release the lock once it is done 
     
    10001265 
    10011266    # Report error if we don't see FileName tag before this 
    1002     die "Fatel Error: Unexpected metadata.xml structure. Undefind current_file, possiblely encountered Description before FileName" if (!defined($parser->{'parameters'}->{'current_file'})); 
     1267    die "Fatal Error: Unexpected metadata.xml structure. Undefind current_file, possiblely encountered Description before FileName" if (!defined($parser->{'parameters'}->{'current_file'})); 
    10031268     
    10041269    # Don't do anything if we are not in the right FileSet 
     
    10401305 
    10411306    # Failed... Report error if we don't see FileName tag before this 
    1042     die "Fatel Error: Unexpected metadata.xml structure. Undefind current_file, possiblely encountered Description before FileName" if (!defined($parser->{'parameters'}->{'current_file'})); 
     1307    die "Fatal Error: Unexpected metadata.xml structure. Undefind current_file, possiblely encountered Description before FileName" if (!defined($parser->{'parameters'}->{'current_file'})); 
    10431308 
    10441309    # Don't do anything if we are not in the right FileSet 
     
    12181483     
    12191484    if ($baseaction::authentication_enabled) { 
    1220     # Ensure the user is allowed to edit this collection 
    1221     $self->authenticate_user($username, $collect); 
     1485        # Ensure the user is allowed to edit this collection 
     1486        $self->authenticate_user($username, $collect); 
    12221487    } 
    12231488 
     
    12971562} 
    12981563 
     1564sub set_import_metadata_array 
     1565{ 
     1566    my $self = shift @_; 
     1567 
     1568    my $username  = $self->{'username'}; 
     1569    my $collect   = $self->{'collect'}; 
     1570    my $gsdl_cgi  = $self->{'gsdl_cgi'}; 
     1571    my $gsdlhome  = $self->{'gsdlhome'}; 
     1572 
     1573    if ($baseaction::authentication_enabled) { 
     1574        # Ensure the user is allowed to edit this collection 
     1575        &authenticate_user($gsdl_cgi, $username, $collect); 
     1576    } 
     1577 
     1578    my $site = $self->{'site'}; 
     1579    my $collect_dir = $gsdl_cgi->get_collection_dir($site); 
     1580     
     1581    $gsdl_cgi->checked_chdir($collect_dir); 
     1582 
     1583    # Make sure the collection isn't locked by someone else 
     1584    $self->lock_collection($username, $collect); 
     1585 
     1586    # look up additional args 
     1587     
     1588    my $infodbtype = $self->{'infodbtype'}; 
     1589 
     1590    my $archive_dir = &util::filename_cat($collect_dir,$collect,"archives"); 
     1591     
     1592    my $json_str = $self->{'json'}; 
     1593    my $doc_array = decode_json $json_str; 
     1594     
     1595    my $global_status = 0; 
     1596    my $global_mess = ""; 
     1597     
     1598    my @all_docids = (); 
     1599     
     1600    foreach my $doc_array_rec ( @$doc_array )  
     1601    {    
     1602        my $docid = $doc_array_rec->{'docid'}; 
     1603        my $metaname = $doc_array_rec->{'metaname'}; 
     1604        my $metamode = $self->{'metamode'}; 
     1605        my $metavalue = $doc_array_rec->{'metavalue'}; 
     1606 
     1607        if ((!defined $metamode) || ($metamode =~ m/^\s*$/)) { 
     1608            # make "accumulate" the default (less destructive, as won't actually  
     1609            # delete any existing values) 
     1610            $metamode = "accumulate"; 
     1611        }  
     1612 
     1613        push(@all_docids,$docid); 
     1614 
     1615        # Obtain where the metadata.xml is from the archiveinfo-doc.gdb file 
     1616        # If the doc oid is not specified, we assume the metadata.xml is next to the specified "f" 
     1617        my $metadata_xml_file; 
     1618        my $import_filename = undef; 
     1619 
     1620        my $arcinfo_doc_filename = &dbutil::get_infodb_file_path($infodbtype, "archiveinf-doc", $archive_dir); 
     1621        my $doc_rec = &dbutil::read_infodb_entry($infodbtype, $arcinfo_doc_filename, $docid); 
     1622 
     1623        # This now stores the full pathname 
     1624        $import_filename = $doc_rec->{'src-file'}->[0];  
     1625 
     1626        # figure out correct metadata.xml file [?] 
     1627        # Assuming the metadata.xml file is next to the source file 
     1628        # Note: This will not work if it is using the inherited metadata from the parent folder 
     1629        my ($import_tailname, $import_dirname) = File::Basename::fileparse($import_filename); 
     1630        my $metadata_xml_filename = &util::filename_cat($import_dirname,"metadata.xml"); 
     1631 
     1632        $self->edit_metadata_xml($gsdl_cgi, $metadata_xml_filename, $metaname, $metavalue, $metamode, $import_tailname); 
     1633    } 
     1634 
     1635    my $mess = "set-archives-metadata-array successful: Keys[ ".join(", ",@all_docids)."]\n"; 
     1636    $gsdl_cgi->generate_ok_message($mess); 
     1637     
     1638    # Release the lock once it is done 
     1639    $self->unlock_collection($username, $collect); 
     1640} 
     1641 
    12991642sub remove_import_metadata 
    13001643{ 
     
    13281671    if ((!defined $docid) || ($docid =~ m/^\s*$/))  
    13291672    { 
    1330         die "No docid (d=...) specified.\n"; 
     1673        $gsdl_cgi->generate_error_message("No docid (d=...) specified.\n"); 
    13311674    } 
    13321675     
     
    13501693    if((!defined $import_filename) || ($import_filename =~ m/^\s*$/)) 
    13511694    { 
    1352         die "There is no metadata\n"; 
     1695        $gsdl_cgi->generate_error_message("There is no metadata\n"); 
    13531696    } 
    13541697