Changeset 10360
- Timestamp:
- 2005-07-29T14:53:30+12:00 (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gsdl3/bin/script/convert_coll_from_gs2.pl
r10326 r10360 16 16 use XML::Writer; 17 17 use GDBM_File; 18 19 use strict; 18 20 19 21 &main(); … … 59 61 $collectdir = &util::filename_cat ($collectdir, $collection); 60 62 61 $collconfigfilename = &util::filename_cat ($collectdir, "etc", "collect.cfg");63 my $collconfigfilename = &util::filename_cat ($collectdir, "etc", "collect.cfg"); 62 64 print STDOUT "coll config=$collconfigfilename\n"; 63 65 my $collectcfg; … … 71 73 72 74 73 $buildconfigfilename = &util::filename_cat ($collectdir, "index", "build.cfg");75 my $buildconfigfilename = &util::filename_cat ($collectdir, "index", "build.cfg"); 74 76 my $buildcfg; 75 77 if (-e $buildconfigfilename) { … … 132 134 my $collectionmeta = $collectcfg->{'collectionmeta'}; 133 135 if (defined $collectionmeta) { 134 %name_map = ('collectionname', 'name',136 my %name_map = ('collectionname', 'name', 135 137 'collectionextra', 'description', 136 138 'iconcollection', 'icon', … … 138 140 139 141 $collwriter->startTag('displayItemList'); 140 foreach $entry ( keys %$collectionmeta) {142 foreach my $entry ( keys %$collectionmeta) { 141 143 if (defined $name_map{$entry}) { 142 $name= $name_map{$entry};143 foreach $lang (keys %{$collectionmeta->{$entry}}) {144 $value = $collectionmeta->{$entry}->{$lang};144 my $name= $name_map{$entry}; 145 foreach my $lang (keys %{$collectionmeta->{$entry}}) { 146 my $value = $collectionmeta->{$entry}->{$lang}; 145 147 if ($entry =~ /^icon/) { 146 148 $value = format_icon_value($value); … … 166 168 my $first = 1; 167 169 if (defined $buildcfg->{'indexmap'}) { 168 $indexmap_t = $buildcfg->{'indexmap'};169 foreach $i (@$indexmap_t) {170 my $indexmap_t = $buildcfg->{'indexmap'}; 171 foreach my $i (@$indexmap_t) { 170 172 my ($k, $v) = $i =~ /^(.*)\-\>(.*)$/; 171 173 $indexmap->{$k} = $v; … … 192 194 #output the search stuff to coll cfg 193 195 $collwriter->startTag('search'); 194 foreach $i (keys %$indexmap) {195 $shortname = $indexmap->{$i};196 foreach my $i (keys %$indexmap) { 197 my $shortname = $indexmap->{$i}; 196 198 $collwriter->startTag('index', 'name'=>$shortname); 197 199 #find the coll meta stuff 198 $indexdisplay = ".$i";199 foreach $lang (keys %{$collectionmeta->{$indexdisplay}}) {200 $value = $collectionmeta->{$indexdisplay}->{$lang};200 my $indexdisplay = ".$i"; 201 foreach my $lang (keys %{$collectionmeta->{$indexdisplay}}) { 202 my $value = $collectionmeta->{$indexdisplay}->{$lang}; 201 203 output_display($collwriter, 'name', $lang, $value); 202 204 } … … 236 238 $defaultlevel = 'Document'; 237 239 if (defined $collectcfg->{'levels'}) { 238 foreach $l (@{$collectcfg->{'levels'}}) {240 foreach my $l (@{$collectcfg->{'levels'}}) { 239 241 if ($l eq "Section") { 240 242 $defaultlevel = 'Section'; … … 264 266 if (defined $collectcfg->{'classify'}) { 265 267 $collwriter->startTag('browse'); 268 # add in default format if necessary 269 if (defined $format->{"VList"} || defined $format->{"HList"}) { 270 # global formats 271 $collwriter->startTag('format'); 272 if (defined $format->{"VList"}) { 273 # VLIst applies to both classifier and doc nodes 274 write_format($collwriter, $format->{"VList"}, "document"); 275 write_format($collwriter, $format->{"VList"}, "classifier"); 276 } 277 if (defined $format->{"HList"}) { 278 # hlist is only for classifier nodes 279 write_format($collwriter, $format->{"HList"}, "horizontal"); 280 } 281 $collwriter->endTag('format'); 282 } 266 283 my $classifiers = $collectcfg->{'classify'}; 267 foreach $cl (@$classifiers) {268 $name = "CL$count";284 foreach my $cl (@$classifiers) { 285 my $name = "CL$count"; 269 286 $count++; 270 287 my ($classname) = @$cl[0]; … … 278 295 if (not $started_classifiers) { 279 296 $buildwriter->startTag('serviceRack', 'name'=>'GS2Browse'); 280 $buildwriter->startTag('classifierList'); 297 $buildwriter->startTag('classifierList'); 281 298 $started_classifiers = 1; 282 299 } … … 285 302 $content = "Date"; 286 303 } else { 287 for ( $i=0; $i<scalar(@$cl); $i++) {288 $arg = @$cl[$i];304 for (my $i=0; $i<scalar(@$cl); $i++) { 305 my $arg = @$cl[$i]; 289 306 if ($arg eq "-buttonname"){ 290 307 $content = @$cl[$i+1]; … … 304 321 305 322 $collwriter->startTag('classifier', 'name'=>$name); 306 $vlist = $name."VList";307 $hlist = $name."HList";308 $dlist = "";323 my $vlist = $name."VList"; 324 my $hlist = $name."HList"; 325 my $dlist = ""; 309 326 if ($classname eq "DateList") { 310 327 $dlist = "DateList"; 311 328 } 312 329 # need to work out how to split into classifier and document 313 if (defined $format->{$vlist} || defined $format->{ "VList"}|| defined $format->{$hlist} || defined $format->{"HList"} || defined $format->{$dlist}) {330 if (defined $format->{$vlist} || defined $format->{$hlist} || defined $format->{$dlist}) { 314 331 $collwriter->startTag('format'); 315 332 if (defined $format->{$vlist}) { 316 333 write_format($collwriter, $format->{$vlist}, "document"); 317 } elsif (defined $format->{"VList"}) { 318 # use VList if no specific one 319 write_format($collwriter, $format->{"VList"}, "document"); 320 } 334 write_format($collwriter, $format->{$vlist}, "classifier"); 335 } 321 336 if (defined $format->{$hlist}) { 322 337 write_format($collwriter, $format->{$hlist}, "horizontal"); 323 } elsif (defined $format->{"HList"}) { 324 # use HList if no specific one 325 write_format($collwriter, $format->{"HList"}, "horizontal"); 326 } 338 } 339 327 340 if (defined $format->{$dlist}) { 328 341 write_format($collwriter, $format->{$dlist}, "document"); … … 355 368 $buildwriter->emptyTag('defaultLevel', 'name'=>$defaultlevel); 356 369 $buildwriter->startTag('levelList'); 357 foreach $level (@levels) {370 foreach my $level (@levels) { 358 371 $buildwriter->emptyTag('level', 'name'=>$level); 359 372 } … … 364 377 my $fieldlist = (); 365 378 if (defined $buildcfg->{'indexfields'}) { 366 push @ fieldlist, @{$buildcfg->{'indexfields'}};379 push @$fieldlist, @{$buildcfg->{'indexfields'}}; 367 380 if (defined $buildcfg->{'indexfieldmap'}) { 368 $fieldmap_t = $buildcfg->{'indexfieldmap'};369 foreach $f (@$fieldmap_t) {381 my $fieldmap_t = $buildcfg->{'indexfieldmap'}; 382 foreach my $f (@$fieldmap_t) { 370 383 my ($k, $v) = $f =~ /^(.*)\-\>(.*)$/; 371 384 $fieldmap->{$k} = $v; … … 373 386 } 374 387 $buildwriter->startTag('fieldList'); 375 foreach $f (@fieldlist) {376 $field = $fieldmap->{$f};388 foreach my $f (@$fieldlist) { 389 my $field = $fieldmap->{$f}; 377 390 $buildwriter->emptyTag('field', 'shortname'=>$field, 'name'=>$f); 378 391 } … … 385 398 if (defined $collectcfg->{'searchtype'}) { 386 399 $buildwriter->startTag('searchTypeList'); 387 foreach $st (@{$collectcfg->{'searchtype'}}) {400 foreach my $st (@{$collectcfg->{'searchtype'}}) { 388 401 $buildwriter->emptyTag('searchType', 'name'=>$st); 389 402 } … … 398 411 $buildwriter->startTag('indexList'); 399 412 #for each index 400 foreach $i (keys %$indexmap) {401 $index = $indexmap->{$i};413 foreach my $i (keys %$indexmap) { 414 my $index = $indexmap->{$i}; 402 415 $buildwriter->emptyTag('index', 'name'=>$index); 403 416 } … … 437 450 my ($value) = @_; 438 451 if ($value =~ /^_/) { 439 ($newvalue) = $value =~ /\/([^\/]*)$/;452 my ($newvalue) = $value =~ /\/([^\/]*)$/; 440 453 if ($newvalue) { 441 454 return $newvalue; … … 451 464 452 465 #convert [] to <gsf:...> 466 # assume no nesting {If} or {Or} for now 453 467 #remove IFs, for now just make the first option true 454 $old_format =~ s/\{If\}\{[^,]*,([^,\}]*)(,[^\}]*)?\}/$1/g;468 #$old_format =~ s/\{If\}\{[^,]*,([^,\}]*)(,[^\}]*)?\}/$1/g; 455 469 #remove ORs, for now just make the first option true 456 $old_format =~ s/\{Or\}\{([^,]*),[^\}]*\}/$1/g; 470 $old_format =~ s/\{If\}\{([^\}]*)\}/&format_if($1, $node_type)/eg; 471 $old_format =~ s/\{Or\}\{([^\}]*)\}/&format_or($1)/eg; 472 # $old_format =~ s/\{Or\}\{([^,]*),[^\}]*\}/$1/g; 457 473 $old_format =~ s/\[Text\]/\<gsf:text\/\>/g; 458 474 $old_format =~ s/\[num\]/\<gsf:num\/\>/g; … … 463 479 $old_format =~ s/\[icon\]/\<gsf:icon\/\>/g; 464 480 $old_format =~ s/\[srcicon\]/\<gsf:icon type=\'source\'\/\>/g; 481 482 # what to do with hightlight?? 483 $old_format =~ s/\[\/?highlight\]//g; 465 484 466 485 #now do the rest of the [] which are assumed to be metadata 467 $old_format =~ s/\[([^\]]*\:)?([^\]\:]*)\]/\<gsf:metadata name=\'$2\' select=\'$1\'\/\>/g; 468 # remove ex. 469 $old_format =~ s/<gsf:metadata name=\'ex\.([^\']+)\'/<gsf:metadata name=\'$1\'/g; 470 #do the parent stuff 471 $old_format =~ s/(select=\'parent)\:\'/$1\'/g; 472 $old_format =~ s/select=\'parent\(Top\)\:\'/select=\'root\'/g; 473 $old_format =~ s/select=\'parent\(All\)\:\'/select=\'ancestors\'/g; 474 $old_format =~ s/select=\'parent\(All\'([^\']*)\'\)\:\'/select=\'ancestors\' separator=\'$1\'/g; 475 #remove any select='' 476 $old_format =~ s/select=\'\'//g; 486 $old_format =~ s/\[([^\]]*)\]/&format_metadata($1)/eg; 487 # $old_format =~ s/\[([^\]]*\:)?([^\]\:]*)\]/\<gsf:metadata name=\'$2\' select=\'$1\'\/\>/g; 488 # # remove ex. 489 # $old_format =~ s/<gsf:metadata name=\'ex\.([^\']+)\'/<gsf:metadata name=\'$1\'/g; 490 # #do the parent stuff 491 # $old_format =~ s/(select=\'parent)\:\'/$1\'/g; 492 # $old_format =~ s/select=\'parent\(Top\)\:\'/select=\'root\'/g; 493 # $old_format =~ s/select=\'parent\(All\)\:\'/select=\'ancestors\'/g; 494 # $old_format =~ s/select=\'parent\(All\'([^\']*)\'\)\:\'/select=\'ancestors\' separator=\'$1\'/g; 495 # #remove any select='' 496 # $old_format =~ s/select=\'\'//g; 497 498 # some html tidy 477 499 #turn <br> into <br /> 478 500 $old_format =~ s/\<br\>/\<br \/\>/g; … … 499 521 } 500 522 523 sub format_metadata { 524 my ($metadata_string) = @_; 525 526 #print STDERR "original meta = $metadata_string\n"; 527 528 # what shall we do with cgisafe?? 529 my $cgisafe = $metadata_string =~ s/^cgisafe://; 530 531 my ($select) = $metadata_string =~ /^(parent|sibling)/; 532 $metadata_string =~ s/^(parent|sibling)//; 533 my ($scope, $delim); 534 535 if ($select) { 536 ($scope) = $metadata_string =~ /^\((Top|All)/; 537 $metadata_string =~ s/^\((Top|All)\)?//; 538 if ($scope) { 539 ($delim) = $metadata_string =~ /^:\'([^\']*)\'\)/; 540 $metadata_string =~ s/^:\'([^\']*)\'\)//; 541 } 542 } 543 $metadata_string =~ s/^://; 544 # remove ex. 545 $metadata_string =~ s/^ex\.//; 546 547 #print STDERR "select=$select, scope=$scope, delim=|$delim|, meta = $metadata_string\n"; 548 549 my $new_format = "<gsf:metadata name='$metadata_string' "; 550 if (defined $select) { 551 if ($select eq "sibling") { 552 $new_format .= "multiple='true' "; 553 if (defined $delim) { 554 $new_format .= "separator='$delim' "; 555 } 556 } elsif ($select eq "parent"){ 557 if (defined $scope) { 558 if ($scope eq "Top") { 559 $new_format .= "select='root' "; 560 } elsif ($scope eq "All") { 561 $new_format .= "select='ancestors' "; 562 if (defined $delim) { 563 $new_format .= "separator='$delim' "; 564 } 565 } 566 } else { 567 $new_format .= "select='parent' "; 568 } 569 } 570 } 571 $new_format .= "/>"; 572 #print STDERR "$new_format\n"; 573 return $new_format; 574 575 } 576 577 sub format_if { 578 579 my ($if_string, $node_type) = @_; 580 581 return "if statement to go here"; 582 } 583 584 sub format_or { 585 my ($or_string) = @_; 586 my @meta_list = split (',', $or_string); 587 return "" unless scalar (@meta_list); 588 my $new_format = "<gsf:choose-metadata>"; 589 foreach my $m (@meta_list) { 590 if ($m =~ /^\[(.*)\]$/) { 591 $new_format .= &format_metadata($1); 592 } else { 593 # a default value 594 $new_format .= "<gsf:default>$m</gsf:default>"; 595 last; 596 } 597 } 598 $new_format .= "</gsf:choose-metadata>"; 599 return $new_format; 600 } 601 501 602 sub open_database { 502 603 my ($db_file) = @_; 503 604 504 605 my $database = (); 505 tie (% database, GDBM_File, $db_file, &GDBM_READER, 0400) ||606 tie (%$database, 'GDBM_File', $db_file, &GDBM_READER, 0400) || 506 607 die "Couldn't open database $db_file\n"; 507 608 … … 511 612 sub close_database { 512 613 my ($database) = @_; 513 untie % database;614 untie %$database; 514 615 } 515 616 sub isHorizontalClassifier { 516 617 my ($database, $name) = @_; 517 618 518 my $record = $database {$name};619 my $record = $database->{$name}; 519 620 my ($childtype) = $record =~ /<childtype>(\w*)/; 520 621 if ($childtype eq "HList") {
Note:
See TracChangeset
for help on using the changeset viewer.