root/trunk/gsdl3/bin/script/convert_coll_from_gs2.pl @ 3771

Revision 3771, 6.5 KB (checked in by kjdon, 17 years ago)

added support for mg collections

  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
Line 
1#!/usr/bin/perl -w
2
3BEGIN {
4    die "GSDLHOME not set\n" unless defined $ENV{'GSDLHOME'};
5    die "GSDLOS not set\n" unless defined $ENV{'GSDLOS'};
6    unshift (@INC, "$ENV{'GSDLHOME'}/perllib");
7    unshift (@INC, "$ENV{'GSDLHOME'}/perllib/cpan");
8    #unshift (@INC, "$ENV{'GSDLHOME'}/perllib/plugins");
9   # unshift (@INC, "$ENV{'GSDLHOME'}/perllib/classify");
10}
11
12#use arcinfo;
13use colcfg;
14#use plugin;
15use docprint;
16use util;
17use parsargv;
18use FileHandle;
19use XML::Writer;
20
21&main();
22sub print_usage() {
23    print STDOUT "Usage: convert_coll_from_gs2.pl [options] coll-name\n";
24    print STDOUT "options:\n";
25   
26}
27
28sub main {
29
30    my ($collectdir);
31    # note that no defaults are passed for most options as they're set
32    # later (after we check the collect.cfg file)
33    if (!parsargv::parse(\@ARGV,
34             'verbosity/\d+/', \$verbosity,
35             'collectdir/.*/', \$collectdir,
36             'faillog/.*/', \$faillog)) {
37    &print_usage();
38    die "\n";
39    }
40
41    # get and check the collection name
42    if (($collection = &util::use_collection(@ARGV, $collectdir)) eq "") {
43    &print_usage();
44    die "\n";
45    }
46
47    $collconfigfilename = &util::filename_cat ($ENV{'GSDLCOLLECTDIR'}, "etc", "collect.cfg");
48    my $collectcfg;
49    if (-e $collconfigfilename) {
50    $collectcfg = &colcfg::read_collect_cfg ($collconfigfilename);
51
52    }
53    $buildconfigfilename = &util::filename_cat ($ENV{'GSDLCOLLECTDIR'}, "building", "build.cfg");
54    my $buildcfg;
55    if (-e $buildconfigfilename) {
56    $buildcfg = &colcfg::read_build_cfg ($buildconfigfilename);
57
58    }
59
60    my $outfile = &util::filename_cat ($ENV{'GSDLCOLLECTDIR'}, "building", "buildConfig.xml");
61    if (-e $outfile) {
62    print STDOUT "buildConfig file already exists! overwriting it!\n";
63   
64    }
65
66    my $buildtype;
67    if (defined $collectcfg->{'buildtype'}) {
68    $buildtype = $collectcfg->{'buildtype'};
69    } else {
70    $buildtype = 'mg';
71    }
72
73    my $output = new IO::File(">$outfile");
74    my $writer = new XML::Writer(OUTPUT => $output);
75
76    $writer->startTag('buildConfig');
77 
78    if (defined $collectcfg->{'collectionmeta'}) {
79    my $collmeta = $collectcfg->{'collectionmeta'};
80    $writer->startTag('metadataList');
81    #just do collname for now
82    my $collnames = $collmeta->{'collectionname'};
83    foreach $lang (keys %$collnames) {
84        my $short_lang;
85        if ($lang eq 'default') {
86        $short_lang = 'en';
87        } else {
88            ($short_lang) = $lang =~ /^\[l=(..)\]/;
89        }
90        $writer->startTag('metadata', 'lang'=>$short_lang, 'name'=>'collName');
91        $writer->characters($collnames->{$lang});
92        $writer->endTag('metadata');
93    }
94    my $collabouts = $collmeta->{'collectionextra'};
95    foreach $lang (keys %$collabouts) {
96        my $short_lang;
97        if ($lang eq 'default') {
98        $short_lang = 'en';
99        } else {
100            ($short_lang) = $lang =~ /^\[l=(..)\]/;
101        }
102        $writer->startTag('metadata', 'lang'=>$short_lang, 'name'=>'collDescript');
103        $writer->characters($collabouts->{$lang});
104        $writer->endTag('metadata');
105    }
106    $writer->endTag('metadataList');
107    }
108
109   
110    #indexes
111    my $indexmap = {};
112    if (defined $buildcfg->{'indexmap'}) {
113    $indexmap_t = $buildcfg->{'indexmap'};
114    foreach $i (@$indexmap_t) {
115        my ($k, $v) = $i =~ /^(.*)\-\>(.*)$/;
116        $indexmap->{$k} = $v;
117    }
118    } else {
119    print STDERR "indexmap not defined";
120    }
121    my $defaultindex;
122    if (defined $collectcfg->{'defaultindex'}) {
123    $defaultindex = $collectcfg->{'defaultindex'};
124    } else {
125    print STDERR "defaultindex not defined";
126    }
127    $defaultindex = $indexmap->{$defaultindex};
128   
129   
130    $writer->startTag('serviceRackList');
131   
132    if ($buildtype =~ /^mg/) {
133    if ($buildtype eq 'mgpp') {
134        #for each level
135        my @levels = ('Document');
136        my $defaultlevel = 'Document';
137        if (defined $collectcfg->{'levels'}) {
138        push @levels, @{$collectcfg->{'levels'}};
139
140        foreach $l(@levels){
141            $defaultlevel = 'Section' if $l eq 'Section';
142        }
143        }
144       
145        $writer->startTag('serviceRack', 'name'=>'GS2MGPPRetrieve');
146        $writer->emptyTag('defaultLevel', 'name'=>$defaultlevel);
147        $writer->endTag('serviceRack');
148       
149        $writer->startTag('serviceRack', 'name'=>'GS2MGPPSearch');
150        $writer->emptyTag('defaultLevel', 'name'=>$defaultlevel);
151        $writer->startTag('levelList');
152        foreach $level (@levels) {
153        $writer->emptyTag('level', 'name'=>$level);
154        }
155        $writer->endTag('levelList');
156       
157            #fieldlist
158       
159    } elsif ($buildtype eq 'mg') {
160        $writer->startTag('serviceRack', 'name'=>'GS2MGRetrieve');
161        $writer->emptyTag('defaultIndex', 'name'=>$defaultindex);
162        $writer->endTag('serviceRack');
163        $writer->startTag('serviceRack', 'name'=>'GS2MGSearch');
164    }
165
166
167    $writer->emptyTag('defaultIndex', 'name'=>$defaultindex);
168    $writer->startTag('indexList');
169    #for each index
170    foreach $i (keys %$indexmap) {
171        $index = $indexmap->{$i};
172        $writer->emptyTag('index', 'name'=>$index);
173    }   
174    $writer->endTag('indexList');
175   
176    $writer->endTag('serviceRack');
177    }
178
179    #my $classifiers = {};
180    my $count = 1;
181    my $phind = 0;
182    my $started_classifiers = 0;
183    if (defined $collectcfg->{'classify'}) {
184    my $classifiers = $collectcfg->{'classify'};
185    foreach $cl (@$classifiers) {
186        print STDERR "cl=$cl\n";
187        $name = "CL$count";
188        $count++;
189        my ($classname) = @$cl[0];
190        if ($classname eq "Phind") {
191        $phind=1;
192        next;
193        }
194       
195        if (not $started_classifiers) {
196        $writer->startTag('serviceRack', 'name'=>'GS2Browse');
197        $writer->startTag('classifierList');
198        $started_classifiers = 1;
199        }
200        my $title = ''; #use buttonname if defined, otherwise use metadata
201       
202        for ($i=0; $i<scalar(@$cl); $i++) {
203        $arg = @$cl[$i];
204        if ($arg eq "-buttonname") {
205            $title = @$cl[$i+1];
206            last;
207        }
208        if ($arg eq "-metadata") {
209            $title = @$cl[$i+1];
210        }
211        }
212
213        $writer->startTag('classifier', 'name'=>$name);
214        $writer->startTag('metadataList');
215        #title meta
216        $writer->startTag('metadata', 'name'=>'Title');
217        $writer->characters($title);
218        $writer->endTag('metadata');
219        $writer->endTag('metadataList');
220        $writer->endTag('classifier');
221       
222       
223    } #foreach classifier
224    if ($started_classifiers) {
225        # end the classifiers
226        $writer->endTag('classifierList');
227        $writer->endTag('serviceRack');
228    }
229    if ($phind) {
230        # if phind classifier
231        $writer->emptyTag('serviceRack', 'name'=>'PhindPhraseBrowse');
232    }
233   
234    }
235    $writer->endTag('serviceRackList');
236    $writer->endTag('buildConfig');
237    $writer->end();
238    $output->close();
239
240}
241
242#$writer->startTag('');
243#$writer->endTag('');
244#$writer->characters();
245#$writer->emptyTag('');
246
2471;
Note: See TracBrowser for help on using the browser.