Changeset 10360


Ignore:
Timestamp:
2005-07-29T14:53:30+12:00 (19 years ago)
Author:
kjdon
Message:

added use strict. worked on the format statement conversion. have done Or, still to do If

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gsdl3/bin/script/convert_coll_from_gs2.pl

    r10326 r10360  
    1616use XML::Writer;
    1717use GDBM_File;
     18
     19use strict;
    1820
    1921&main();
     
    5961    $collectdir = &util::filename_cat ($collectdir, $collection);
    6062   
    61     $collconfigfilename = &util::filename_cat ($collectdir, "etc", "collect.cfg");
     63    my $collconfigfilename = &util::filename_cat ($collectdir, "etc", "collect.cfg");
    6264    print STDOUT "coll config=$collconfigfilename\n";
    6365    my $collectcfg;
     
    7173   
    7274
    73     $buildconfigfilename = &util::filename_cat ($collectdir, "index", "build.cfg");
     75    my $buildconfigfilename = &util::filename_cat ($collectdir, "index", "build.cfg");
    7476    my $buildcfg;
    7577    if (-e $buildconfigfilename) {
     
    132134    my $collectionmeta = $collectcfg->{'collectionmeta'};
    133135    if (defined $collectionmeta) {
    134     %name_map = ('collectionname', 'name',
     136    my %name_map = ('collectionname', 'name',
    135137             'collectionextra', 'description',
    136138             'iconcollection', 'icon',
     
    138140   
    139141    $collwriter->startTag('displayItemList');
    140     foreach $entry ( keys %$collectionmeta) {
     142    foreach my $entry ( keys %$collectionmeta) {
    141143        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};
    145147            if ($entry =~ /^icon/) {
    146148            $value = format_icon_value($value);
     
    166168    my $first = 1;
    167169    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) {
    170172        my ($k, $v) = $i =~ /^(.*)\-\>(.*)$/;
    171173        $indexmap->{$k} = $v;
     
    192194    #output the search stuff to coll cfg
    193195    $collwriter->startTag('search');
    194     foreach $i (keys %$indexmap) {
    195     $shortname = $indexmap->{$i};
     196    foreach my $i (keys %$indexmap) {
     197    my $shortname = $indexmap->{$i};
    196198    $collwriter->startTag('index', 'name'=>$shortname);
    197199    #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};
    201203        output_display($collwriter, 'name', $lang, $value);
    202204    }
     
    236238        $defaultlevel = 'Document';
    237239        if (defined $collectcfg->{'levels'}) {
    238         foreach $l (@{$collectcfg->{'levels'}}) {
     240        foreach my $l (@{$collectcfg->{'levels'}}) {
    239241            if ($l eq "Section") {
    240242            $defaultlevel = 'Section';
     
    264266    if (defined $collectcfg->{'classify'}) {
    265267    $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    }
    266283    my $classifiers = $collectcfg->{'classify'};
    267     foreach $cl (@$classifiers) {
    268         $name = "CL$count";
     284    foreach my $cl (@$classifiers) {
     285        my $name = "CL$count";
    269286        $count++;
    270287        my ($classname) = @$cl[0];
     
    278295        if (not $started_classifiers) {
    279296        $buildwriter->startTag('serviceRack', 'name'=>'GS2Browse');
    280         $buildwriter->startTag('classifierList');
     297        $buildwriter->startTag('classifierList');       
    281298        $started_classifiers = 1;
    282299        }
     
    285302        $content = "Date";
    286303        } 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];
    289306            if ($arg eq "-buttonname"){
    290307            $content = @$cl[$i+1];
     
    304321       
    305322        $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 = "";
    309326        if ($classname eq "DateList") {
    310327        $dlist = "DateList";
    311328        }
    312329        # 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}) {
    314331        $collwriter->startTag('format');
    315332        if (defined $format->{$vlist}) {
    316333            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        }
    321336        if (defined $format->{$hlist}) {
    322337            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       
    327340        if (defined $format->{$dlist}) {
    328341            write_format($collwriter, $format->{$dlist}, "document");
     
    355368    $buildwriter->emptyTag('defaultLevel', 'name'=>$defaultlevel);
    356369    $buildwriter->startTag('levelList');
    357     foreach $level (@levels) {
     370    foreach my $level (@levels) {
    358371        $buildwriter->emptyTag('level', 'name'=>$level);
    359372    }
     
    364377    my $fieldlist = ();
    365378    if (defined $buildcfg->{'indexfields'}) {
    366         push @fieldlist, @{$buildcfg->{'indexfields'}};
     379        push @$fieldlist, @{$buildcfg->{'indexfields'}};
    367380        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) {
    370383            my ($k, $v) = $f =~ /^(.*)\-\>(.*)$/;
    371384            $fieldmap->{$k} = $v;
     
    373386        }
    374387        $buildwriter->startTag('fieldList');
    375         foreach $f (@fieldlist) {
    376         $field = $fieldmap->{$f};
     388        foreach my $f (@$fieldlist) {
     389        my $field = $fieldmap->{$f};
    377390        $buildwriter->emptyTag('field', 'shortname'=>$field, 'name'=>$f);
    378391        }   
     
    385398    if (defined $collectcfg->{'searchtype'}) {
    386399        $buildwriter->startTag('searchTypeList');
    387         foreach $st (@{$collectcfg->{'searchtype'}}) {
     400        foreach my $st (@{$collectcfg->{'searchtype'}}) {
    388401        $buildwriter->emptyTag('searchType', 'name'=>$st);
    389402        }
     
    398411    $buildwriter->startTag('indexList');
    399412    #for each index
    400     foreach $i (keys %$indexmap) {
    401     $index = $indexmap->{$i};
     413    foreach my $i (keys %$indexmap) {
     414    my $index = $indexmap->{$i};
    402415    $buildwriter->emptyTag('index', 'name'=>$index);
    403416    }   
     
    437450    my ($value) = @_;
    438451    if ($value =~ /^_/) {
    439     ($newvalue) = $value =~ /\/([^\/]*)$/;
     452    my ($newvalue) = $value =~ /\/([^\/]*)$/;
    440453    if ($newvalue) {
    441454        return $newvalue;
     
    451464
    452465    #convert [] to <gsf:...>
     466    # assume no nesting {If} or {Or} for now
    453467    #remove IFs, for now just make the first option true
    454     $old_format =~ s/\{If\}\{[^,]*,([^,\}]*)(,[^\}]*)?\}/$1/g;
     468    #$old_format =~ s/\{If\}\{[^,]*,([^,\}]*)(,[^\}]*)?\}/$1/g;
    455469    #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;
    457473    $old_format =~ s/\[Text\]/\<gsf:text\/\>/g;
    458474    $old_format =~ s/\[num\]/\<gsf:num\/\>/g;
     
    463479    $old_format =~ s/\[icon\]/\<gsf:icon\/\>/g;
    464480    $old_format =~ s/\[srcicon\]/\<gsf:icon type=\'source\'\/\>/g;
     481         
     482    # what to do with hightlight??
     483    $old_format =~ s/\[\/?highlight\]//g;
    465484
    466485    #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
    477499    #turn <br> into <br />
    478500    $old_format =~ s/\<br\>/\<br \/\>/g;
     
    499521}
    500522
     523sub 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
     577sub format_if {
     578
     579    my ($if_string, $node_type) = @_;
     580
     581    return "if statement to go here";
     582}
     583
     584sub 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
    501602sub open_database {
    502603    my ($db_file) = @_;
    503604   
    504605    my $database = ();
    505     tie (%database, GDBM_File, $db_file, &GDBM_READER, 0400) ||
     606    tie (%$database, 'GDBM_File', $db_file, &GDBM_READER, 0400) ||
    506607    die "Couldn't open database $db_file\n";
    507608
     
    511612sub close_database {
    512613    my ($database) = @_;
    513     untie %database;
     614    untie %$database;
    514615}
    515616sub isHorizontalClassifier {
    516617    my ($database, $name) = @_;
    517618
    518     my $record = $database{$name};
     619    my $record = $database->{$name};
    519620    my ($childtype) = $record =~ /<childtype>(\w*)/;
    520621    if ($childtype eq "HList") {
Note: See TracChangeset for help on using the changeset viewer.