--- foxridge-archiver/changemeta.pl 2006/06/27 18:06:41 1.1 +++ foxridge-archiver/changemeta.pl 2006/12/11 18:09:00 1.4 @@ -3,22 +3,24 @@ use strict; use XML::LibXML; -use lib '/usr/local/mpiwg/archive_devel'; +use lib '/usr/local/mpiwg/archive'; use MPIWGStor; # make output unbuffered $|=1; # program version -my $version = "0.1 (27.6.2006 ROC)"; +my $version = "0.3 (11.12.2006 ROC)"; my $help = -"use: checkmeta [options] dir +"use: changemeta [options] dir options: -debug show debugging info -dry-run simulate, dont'do anything - -access=free adds free access tag (use access=mpiwg for restricted access) + -access=free set free access tag (use access=mpiwg for restricted access) + -derived-from=/mpiwg/archive/data/DBDDHKP + -production-comment=\"scanned with flatbed scanner\" "; -logger("INFO", "checkmeta $version"); +logger("INFO", "changemeta $version"); ####################################################### @@ -43,6 +45,14 @@ logger('DEBUG', "dry-run: $dry_run"); my $access_type = (exists $$args{'access'}) ? $$args{'access'} : ""; logger('DEBUG', "access: $access_type"); +# derived-from +my $derived_from = (exists $$args{'derived-from'}) ? $$args{'derived-from'} : ""; +logger('DEBUG', "derived-from: $derived_from"); + +# production-comment +my $production_comment = (exists $$args{'production-comment'}) ? $$args{'production-comment'} : ""; +logger('DEBUG', "production-comment: $production_comment"); + # index.meta namespace (not really implemented!) my $namespace = ""; @@ -81,6 +91,7 @@ sub change_access { my $parent_tag = $index_root->findnodes('//meta/access-conditions')->get_node(1); if ($parent_tag) { my $access_tag = $parent_tag->findnodes('access')->get_node(1); + # remove access tag if it exists if ($access_tag) { $parent_tag->removeChild($access_tag); } @@ -88,6 +99,7 @@ sub change_access { $parent_tag = create_element_path('meta/access-conditions', $index_root, $namespace); } + # add new access tag (if $access_Type is not empty) if ($access_type eq "free") { create_element_path('access@type=free', $parent_tag, $namespace); } elsif (length $access_type > 0) { @@ -97,6 +109,51 @@ sub change_access { $xml_changed++ } +# +# sets derived-from tag to given value +# removes tag if derived_from is empty +# +sub change_derived { + my ($derived_from, $index_root) = @_; + + my $derived_tag = $index_root->findnodes('derived-from')->get_node(1); + # remove derived tag if it exists + if ($derived_tag) { + $index_root->removeChild($derived_tag); + } + + # add new derived tag (if $derived_Type is not empty) + if (length $derived_from > 0) { + create_text_path('derived-from/archive-path', $derived_from, $index_root, $namespace); + } + $xml_changed++ +} + +# +# sets production-comment tag to given value +# removes production tag if production_comment is empty +# +sub change_production { + my ($production_comment, $index_root) = @_; + + my $parent_tag = $index_root->findnodes('//meta/image-acquisition')->get_node(1); + if ($parent_tag) { + my $production_tag = $parent_tag->findnodes('production-comment')->get_node(1); + # remove production tag if it exists + if ($production_tag) { + $parent_tag->removeChild($production_tag); + } + } else { + $parent_tag = create_element_path('meta/image-acquisition', $index_root, $namespace); + } + + # add new production tag (if $production_comment is not empty) + if (length $production_comment > 0) { + create_text_path('production-comment', $production_comment, $parent_tag, $namespace); + } + $xml_changed++ +} + @@ -119,7 +176,13 @@ if (-f "$docdir/index.meta") { } if ($access_type) { - change_access($index_root); + change_access($access_type, $index_root); +} +if ($derived_from) { + change_derived($derived_from, $index_root); +} +if ($production_comment) { + change_production($production_comment, $index_root); } @@ -134,7 +197,7 @@ if ($errcnt > 0) { logger('DEBUG', "would write $docdir/index.meta"); logger('DEBUG', $index_doc->toString(1)); } else { - #write_xml($index_doc, "$docdir/index.meta"); + write_xml($index_doc, "$docdir/index.meta"); } logger("DONE", "changed index file successfully!"); } else {