Changeset 36372
- Timestamp:
- 2022-08-16T19:38:05+12:00 (21 months ago)
- Location:
- main/trunk/greenstone2/perllib
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone2/perllib/extrametautil.pm
r29819 r36372 34 34 35 35 36 #******************* ADD: add extrametakey, add extrametadata *********************# 36 # extrametakeys - an array that contains all the filenames for which we have 37 # some added metadata 38 #--------------------------------- 37 39 sub addmetakey { 38 40 my ($extrametakeys, $filename_re_for_metadata) = @_; … … 40 42 } 41 43 44 # extrametafiles - a hash on filenames (the files to which metadata will be 45 # associated), containing a hash of file->fullfilename for all the metadata 46 # files that metadata was obtained from 47 #------------------------------------------- 48 49 sub addmetafile { 50 my ($extrametafile, $filename_re_for_metadata, $file, $filename_full_path) = @_; 51 if (!defined $extrametafile->{$filename_re_for_metadata}) { 52 $extrametafile->{$filename_re_for_metadata} = {}; 53 } 54 $extrametafile->{$filename_re_for_metadata}->{$file} = $filename_full_path; 55 } 56 57 # was called setmetafile 58 sub setmetafilehash { 59 my ($extrametafile, $filename_re_for_metadata, $file_hash) = @_; 60 $extrametafile->{$filename_re_for_metadata} = $file_hash; 61 } 62 63 # was called getmetafile 64 sub getmetafilehash { 65 my ($extrametafile, $filename_re_for_metadata) = @_; 66 return $extrametafile->{$filename_re_for_metadata}; 67 } 68 69 # extrametadata - a hash on filenames (the files to which metadata will be 70 # associated), containing a hash of name->[value array] pairs of metadata 71 #---------------------------------------- 72 73 # set the metadata hash for a particular file 74 sub setmetadata { 75 my ($extrametadata, $filename_re_for_metadata, $meta_hash) = @_; 76 $extrametadata->{$filename_re_for_metadata} = $meta_hash; 77 } 78 79 # gets the metadata hash for a particular file 80 sub getmetadata { 81 my ($extrametadata, $filename_re_for_metadata) = @_; 82 return $extrametadata->{$filename_re_for_metadata}; 83 } 84 85 # add a single value to a specific metadata field 86 sub addmetadatum { 87 my ($extrametadata, $filename_re_for_metadata, $field_name, $value) = @_; 88 if (!defined $extrametadata->{$filename_re_for_metadata}->{$field_name}) { 89 $extrametadata->{$filename_re_for_metadata}->{$field_name} = []; 90 } 91 my $metaname_vals = $extrametadata->{$filename_re_for_metadata}->{$field_name}; 92 push(@$metaname_vals, $value); 93 } 94 95 # get a specific value for a particular metadata field 96 # e.g. $extrametadata->{$filename_re_for_metadata}->{"dc.Identifier"}->[0] 97 sub getmetadatum_by_index { 98 my ($extrametadata, $filename_re_for_metadata, $metaname, $index) = @_; 99 return $extrametadata->{$filename_re_for_metadata}->{$metaname}->[$index]; 100 } 101 102 #---------------------------------------------- 103 #### unused below here 104 42 105 # Unused. Added for symmetry 43 sub addmetadata {106 sub addmetadata_UNUSED { 44 107 my ($extrametadata, $filename_re_for_metadata, $value) = @_; 45 108 my $metanames = $extrametadata->{$filename_re_for_metadata}; … … 48 111 49 112 # Unused. Added for symmetry 50 sub addmetafile {113 sub addmetafile_UNUSED { 51 114 my ($extrametafile, $filename_re_for_metadata, $file) = @_; 52 115 my $metafiles = $extrametafile->{$filename_re_for_metadata}; … … 54 117 } 55 118 56 sub addmetadata_for_named_metaname { # e.g. push(@{$extrametadata->{$filename_re_for_metadata}->{$field_name}}, $value);119 sub addmetadata_for_named_metaname_OLD { # e.g. push(@{$extrametadata->{$filename_re_for_metadata}->{$field_name}}, $value); 57 120 my ($extrametadata, $filename_re_for_metadata, $field_name, $value) = @_; 58 121 my $metaname_vals = $extrametadata->{$filename_re_for_metadata}->{$field_name}; … … 61 124 62 125 # Unused. Added for symmetry 63 sub addmetafile_for_named_file {126 sub addmetafile_for_named_file_UNUSED { 64 127 my ($extrametafile, $filename_re_for_metadata, $file, $filename_full_path) = @_; 65 128 my $metafile_vals = $extrametafile->{$filename_re_for_metadata}->{$file}; … … 73 136 74 137 #******************* GET methods 75 sub getmetadata {76 my ($extrametadata, $filename_re_for_metadata) = @_;77 return $extrametadata->{$filename_re_for_metadata};78 }79 138 80 sub getmetafile {81 my ($extrametafile, $filename_re_for_metadata) = @_;82 return $extrametafile->{$filename_re_for_metadata};83 }84 139 85 sub getmetadata_for_named_metaname {140 sub getmetadata_for_named_metaname_OLD { 86 141 my ($extrametadata, $filename_re_for_metadata, $field_name) = @_; 87 142 return $extrametadata->{$filename_re_for_metadata}->{$field_name}; # e.g. $extrametadata->{$filename_re_for_metadata}->{$field_name} … … 89 144 90 145 # Unused. Added for symmetry 91 sub getmeta data_for_named_file{146 sub getmetafile_for_named_file_UNUSED { 92 147 my ($extrametafile, $filename_re_for_metadata, $file) = @_; 93 148 return $extrametafile->{$filename_re_for_metadata}->{$file}; 94 149 } 95 150 96 sub getmetadata_for_named_pos {97 my ($extrametadata, $filename_re_for_metadata, $metaname, $index) = @_;98 return $extrametadata->{$filename_re_for_metadata}->{$metaname}->[$index]; # e.g. $extrametadata->{$filename_re_for_metadata}->{"dc.Identifier"}->[0]99 }100 151 101 152 102 153 #******************* SET methods 103 sub setmetadata { 104 my ($extrametadata, $filename_re_for_metadata, $value) = @_; 105 $extrametadata->{$filename_re_for_metadata} = $value; 154 155 # set an individual name-value pair in the metadata hash for a particular file 156 sub setmetadata_for_named_metaname_OLD { 157 my ($extrametadata, $filename_re_for_metadata, $field_name, $value) = @_; 158 $extrametadata->{$filename_re_for_metadata}->{$field_name} = $value; 106 159 } 107 108 sub setmetafile { # e.g. $extrametafile{$filename_re_for_metadata} = $file; 109 my ($extrametafile, $filename_re_for_metadata, $file) = @_; 160 sub setmetafile_UNUSED { # e.g. $extrametafile{$filename_re_for_metadata} = $file; 161 my ($extrametafile, $filename_re_for_metadata, $file, $filename_full_path) = @_; 110 162 $extrametafile->{$filename_re_for_metadata} = $file; 111 163 } 112 164 113 sub setmetadata_for_named_metaname { 114 my ($extrametadata, $filename_re_for_metadata, $field_name, $value) = @_; 115 $extrametadata->{$filename_re_for_metadata}->{$field_name} = $value; 116 } 117 118 sub setmetafile_for_named_file { 165 sub setmetafile_for_named_file_OLD { 119 166 my ($extrametafile, $filename_re_for_metadata, $file, $filename_full_path) = @_; 120 167 $extrametafile->{$filename_re_for_metadata}->{$file} = $filename_full_path; … … 122 169 123 170 # Unused. Added for symmetry 124 sub setmetadata_for_named_pos {171 sub setmetadata_for_named_pos_UNUSED { 125 172 my ($extrametadata, $filename_re_for_metadata, $metaname, $index, $value) = @_; 126 173 $extrametadata->{$filename_re_for_metadata}->{$metaname}->[$index] = $value; -
main/trunk/greenstone2/perllib/plugins/DirectoryPlugin.pm
r33721 r36372 419 419 &extrametautil::addmetakey(\@extrametakeys, $extrakeys_re); 420 420 &extrametautil::setmetadata(\%extrametadata, $extrakeys_re, $extrakeys_md); 421 &extrametautil::setmetafile (\%extrametafile, $extrakeys_re, $extrakeys_mf);421 &extrametautil::setmetafilehash(\%extrametafile, $extrakeys_re, $extrakeys_mf); 422 422 } 423 423 delete($self->{'subdir_extrametakeys'}->{$local_dirname}); 424 424 } 425 425 } 426 426 427 # apply metadata pass for each of the files in the directory -- ignore 427 428 # maxdocs here … … 430 431 my $subfile = $dir[$i]; 431 432 next if ($subfile =~ m/^\.\.?$/); 432 433 433 my $this_file_base_dir = $base_dir; 434 434 my $raw_subfile = &unicode::url_encoded_to_raw_filename($subfile); … … 460 460 # a subdir was specified 461 461 my $md = &extrametautil::getmetadata(\%extrametadata, $ek); 462 my $mf = &extrametautil::getmetafile (\%extrametafile, $ek);462 my $mf = &extrametautil::getmetafilehash(\%extrametafile, $ek); 463 463 464 464 my $subdir_extrametakeys = $self->{'subdir_extrametakeys'}; … … 579 579 if ($verbosity > 2); 580 580 my $mdref = &extrametautil::getmetadata(\%extrametadata, $filespec); 581 my $mfref = &extrametautil::getmetafile (\%extrametafile, $filespec);581 my $mfref = &extrametautil::getmetafilehash(\%extrametafile, $filespec); 582 582 583 583 # Add the list files where the metadata came from -
main/trunk/greenstone2/perllib/plugins/EmbeddedMetadataPlugin.pm
r34921 r36372 29 29 30 30 use BaseImporter; 31 use MetadataRead; 31 32 use extrametautil; 32 33 use util; … … 41 42 sub BEGIN 42 43 { 43 @EmbeddedMetadataPlugin::ISA = (' BaseImporter');44 @EmbeddedMetadataPlugin::ISA = ('MetadataRead', 'BaseImporter'); 44 45 binmode(STDERR, ":utf8"); 45 46 } … … 441 442 #print STDERR "file = $file " . &unicode::debug_unicode_string($file); 442 443 $file = &util::raw_filename_to_unicode(&util::filename_head($filename), $file); 444 445 $self->store_meta_in_extrametadata($file, $exif_metadata, undef, undef, $extrametakeys, $extrametadata, $extrametafile); 446 447 if (0) { 443 448 #print STDERR "$file ". &unicode::debug_unicode_string($file); 444 449 $file = &util::filepath_to_url_format($file); … … 465 470 &extrametautil::addmetakey($extrametakeys, $file); 466 471 } 467 472 } 468 473 } 469 474 -
main/trunk/greenstone2/perllib/plugins/LOMPlugin.pm
r36297 r36372 171 171 } 172 172 173 if (defined $lom_srcdoc) { 174 $self->store_meta_in_extrametadata($filename_re, $self->{'saved_metadata'}, $file, $filename_full_path, $extrametakeys, $extrametadata, $extrametafile); 175 } else { 176 $self->store_meta_in_extrametadata($filename_for_metadata, $self->{'saved_metadata'}, undef, undef, $extrametakeys, $extrametadata, $extrametafile); 177 } 178 $self->{'lom_srcdoc'} = undef; # reset for next file to be processed 173 179 # Indexing into the extrameta data structures requires the filename's style of slashes to be in URL format 174 180 # Then need to convert the filename to a regex, no longer to protect windows directory chars \, but for 175 181 # protecting special characters like brackets in the filepath such as "C:\Program Files (x86)\Greenstone". 182 if (0) { 176 183 $file_re = &util::filepath_to_url_format($file_re); 177 184 $file_re = &util::filename_to_regex($file_re); … … 188 195 &extrametautil::setmetafile_for_named_file($extrametafile, $file_re, $file, $filename_full_path); 189 196 } 190 197 } 191 198 return 1; 192 199 } -
main/trunk/greenstone2/perllib/plugins/MetadataCSVPlugin.pm
r34249 r36372 270 270 271 271 # Associate the metadata now 272 $self->store_meta_in_extrametadata($csv_line_filename, \%csv_line_metadata, $file, $filename_full_path, $extrametakeys, $extrametadata, $extrametafile); 272 273 # Indexing into the extrameta data structures requires the filename's style of slashes to be in URL format 273 274 # Then need to convert the filename to a regex, no longer to protect windows directory chars \, but for 274 275 # protecting special characters like brackets in the filepath such as "C:\Program Files (x86)\Greenstone". 276 277 if (0) { 275 278 $csv_line_filename = &util::filepath_to_url_format($csv_line_filename); 276 279 $csv_line_filename = &util::filename_to_regex($csv_line_filename); … … 297 300 # maps the file to full path 298 301 &extrametautil::setmetafile_for_named_file($extrametafile, $csv_line_filename, $file, $filename_full_path); 302 } 299 303 } 300 304 } -
main/trunk/greenstone2/perllib/plugins/MetadataRead.pm
r31492 r36372 61 61 push(@{$hashArgOptLists->{"OptList"}},$options); 62 62 63 64 65 63 # Like PrintInfo, MetadataRead has no superclass, 64 # so $self is intialised to an empty array. 65 my $self = {}; 66 66 return bless $self, $class; 67 67 … … 80 80 } 81 81 82 # filename_for_metadata is the name of the file to attach metadata to. $new_metadata is a hash of all the metadata. file is the metadata file, filename_full_path is full path to metadata file 83 sub store_meta_in_extrametadata 84 { 85 my $self = shift(@_); 86 87 my ($filename_for_metadata, $new_metadata, $file, $filename_full_path, 88 $extrametakeys, $extrametadata, $extrametafile) = @_; 89 90 # Extrametadata keys should be regular expressions 91 # Indexing into the extrameta data structures requires the filename's style of slashes to be in URL format 92 # Then need to convert the filename to a regex, no longer to protect windows directory chars \, but for 93 # protecting special characters like brackets in the filepath such as "C:\Program Files (x86)\Greenstone". 94 $filename_for_metadata = &util::filepath_to_url_format($filename_for_metadata); 95 $filename_for_metadata = &util::filename_to_regex($filename_for_metadata); 96 97 # Check that we haven't already got some metadata 98 if (defined &extrametautil::getmetadata($extrametadata, $filename_for_metadata)) { 99 print STDERR "\n**** MetadataRead: Need to merge new metadata with existing stored metadata: file = $filename_for_metadata\n" if $self->{'verbosity'} > 3; 100 101 my $file_metadata_table = &extrametautil::getmetadata($extrametadata, $filename_for_metadata); 102 103 foreach my $metaname (keys %{$new_metadata}) { 104 # will create new entry if one does not already exist 105 push(@{$file_metadata_table->{$metaname}}, @{$new_metadata->{$metaname}}); 106 } 107 108 } else { 109 &extrametautil::setmetadata($extrametadata, $filename_for_metadata, $new_metadata); 110 &extrametautil::addmetakey($extrametakeys, $filename_for_metadata); 111 } 112 113 #if ($srcdoc_exists) { 114 # if (!defined &extrametautil::getmetafile($extrametafile, $filename_for_metadata)) { 115 # &extrametautil::setmetafile($extrametafile, $filename_for_metadata, {}); 116 # } 117 if (defined $file && defined $filename_for_metadata) { 118 #maps the file to full path 119 &extrametautil::addmetafile($extrametafile, $filename_for_metadata, $file, $filename_full_path); 120 } 121 122 123 # } 124 } 82 125 83 126 1; -
main/trunk/greenstone2/perllib/plugins/MetadataXMLPlugin.pm
r32159 r36372 221 221 222 222 if (($ENV{'GSDLOS'} =~ m/^windows$/) && ($^O ne "cygwin")) { 223 223 # convert to full name - paths stored in block hash are long filenames 224 224 $filename_full_path = &util::upgrade_if_dos_filename($filename_full_path); 225 my $lower_drive = $filename_full_path; 226 $lower_drive =~ s/^([A-Z]):/\l$1:/i; 227 228 my $upper_drive = $filename_full_path; 229 $upper_drive =~ s/^([A-Z]):/\u$1:/i; 230 231 $block_hash->{'metadata_files'}->{$lower_drive} = 1; 232 $block_hash->{'metadata_files'}->{$upper_drive} = 1; 225 } 226 # kjdon - upgrade method converts everyhting to lower case drive letter. 227 # so would we need the following stuff??? 228 # my $lower_drive = $filename_full_path; 229 # $lower_drive =~ s/^([A-Z]):/\l$1:/i; 230 231 # my $upper_drive = $filename_full_path; 232 # $upper_drive =~ s/^([A-Z]):/\u$1:/i; 233 234 # $block_hash->{'metadata_files'}->{$lower_drive} = 1; 235 # $block_hash->{'metadata_files'}->{$upper_drive} = 1; 233 236 234 }235 else {237 # } 238 # else { 236 239 $block_hash->{'metadata_files'}->{$filename_full_path} = 1; 237 }240 # } 238 241 239 242 return 1; … … 366 369 my $filename = $self->{'metadata-filename'}; 367 370 368 if (!defined &extrametautil::getmetafile($self->{'metafileref'}, $target)) { 369 &extrametautil::setmetafile($self->{'metafileref'}, $target, {}); 370 } 371 372 &extrametautil::setmetafile_for_named_file($self->{'metafileref'}, $target, $file, $filename); 371 # if (!defined &extrametautil::getmetafile($self->{'metafileref'}, $target)) { 372 # &extrametautil::setmetafile($self->{'metafileref'}, $target, {}); 373 # } 374 375 # &extrametautil::setmetafile_for_named_file($self->{'metafileref'}, $target, $file, $filename); 376 &extrametautil::addmetafile($self->{'metafileref'}, $target, $file, $filename); 373 377 } 374 378 } -
main/trunk/greenstone2/perllib/plugins/OAIMetadataXMLPlugin.pm
r24951 r36372 126 126 { 127 127 # Don't harvest file sets that don't have dc.Identifier set, "dc.Identifier" is usde as the key between Greenstone and OAI Server! 128 my $dc_identifier = &extrametautil::getmetadata_for_named_pos($extrametadata, $one_file, "dc.Identifier", 0); 128 #my $dc_identifier = &extrametautil::getmetadata_for_named_pos($extrametadata, $one_file, "dc.Identifier", 0); 129 my $dc_identifier = &extrametautil::getmetadatum_by_index($extrametadata, $one_file, "dc.Identifier", 0); 129 130 next if (!defined($dc_identifier) || $dc_identifier eq ""); 130 131 … … 199 200 } 200 201 201 &extrametautil::setmetadata_for_named_metaname($extrametadata, $one_file, $field_name, []) if (!defined (&extrametautil::getmetadata_for_named_metaname($extrametadata, $one_file, $field_name))); 202 &extrametautil::addmetadata_for_named_metaname($extrametadata, $one_file, $field_name, $value); 202 #&extrametautil::setmetadata_for_named_metaname($extrametadata, $one_file, $field_name, []) if (!defined (&extrametautil::getmetadata_for_named_metaname($extrametadata, $one_file, $field_name))); 203 #&extrametautil::addmetadata_for_named_metaname($extrametadata, $one_file, $field_name, $value); 204 &extrametautil::addmetadatum($extrametadata, $one_file, $field_name, $value); 203 205 } 204 206 #======================================================================# -
main/trunk/greenstone2/perllib/plugins/OAIPlugin.pm
r31492 r36372 264 264 # Directory plug will pass it back in at read time, so we don't need to extract it again. 265 265 266 # Store the metadata for later in extrameta. if we have a srcdoc, then treat this file as a metadata file, and pass it in to the store_meta method. 267 # If there is no srcdoc, then this is the actual doc, so we don't want it treated as a metadata file. - pass in undef. 268 if ($srcdoc_exists) { 269 $self->store_meta_in_extrametadata($filename_for_metadata, $new_metadata, $file, $filename_full_path, $extrametakeys, $extrametadata, $extrametafile); 270 } else { 271 $self->store_meta_in_extrametadata($filename_for_metadata, $new_metadata, undef, undef, $extrametakeys, $extrametadata, $extrametafile); 272 } 266 273 # Extrametadata keys should be regular expressions 267 274 # Indexing into the extrameta data structures requires the filename's style of slashes to be in URL format 268 275 # Then need to convert the filename to a regex, no longer to protect windows directory chars \, but for 269 276 # protecting special characters like brackets in the filepath such as "C:\Program Files (x86)\Greenstone". 277 278 if (0) { 270 279 $filename_for_metadata = &util::filepath_to_url_format($filename_for_metadata); 271 280 $filename_for_metadata = &util::filename_to_regex($filename_for_metadata); … … 288 297 289 298 if ($srcdoc_exists) { 290 if (!defined &extrametautil::getmetafile($extrametafile, $filename_for_metadata)) {291 &extrametautil::setmetafile($extrametafile, $filename_for_metadata, {});292 }299 # if (!defined &extrametautil::getmetafile($extrametafile, $filename_for_metadata)) { 300 # &extrametautil::setmetafile($extrametafile, $filename_for_metadata, {}); 301 # } 293 302 #maps the file to full path 294 &extrametautil::setmetafile_for_named_file($extrametafile, $filename_for_metadata, $file, $filename_full_path); 303 # &extrametautil::setmetafile_for_named_file($extrametafile, $filename_for_metadata, $file, $filename_full_path); 304 &extrametautil::addmetafile($extrametafile, $filename_for_metadata, $file, $filename_full_path); 295 305 296 306 } 307 } # if 0 308 297 309 return 1; 298 310
Note:
See TracChangeset
for help on using the changeset viewer.