1cdf0e10cSrcweir: # -*- perl -*-
2cdf0e10cSrcweireval 'exec perl -wS $0 ${1+"$@"}'
3cdf0e10cSrcweir    if 0;
4*7e90fac2SAndrew Rist#**************************************************************
5*7e90fac2SAndrew Rist#
6*7e90fac2SAndrew Rist#  Licensed to the Apache Software Foundation (ASF) under one
7*7e90fac2SAndrew Rist#  or more contributor license agreements.  See the NOTICE file
8*7e90fac2SAndrew Rist#  distributed with this work for additional information
9*7e90fac2SAndrew Rist#  regarding copyright ownership.  The ASF licenses this file
10*7e90fac2SAndrew Rist#  to you under the Apache License, Version 2.0 (the
11*7e90fac2SAndrew Rist#  "License"); you may not use this file except in compliance
12*7e90fac2SAndrew Rist#  with the License.  You may obtain a copy of the License at
13*7e90fac2SAndrew Rist#
14*7e90fac2SAndrew Rist#    http://www.apache.org/licenses/LICENSE-2.0
15*7e90fac2SAndrew Rist#
16*7e90fac2SAndrew Rist#  Unless required by applicable law or agreed to in writing,
17*7e90fac2SAndrew Rist#  software distributed under the License is distributed on an
18*7e90fac2SAndrew Rist#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
19*7e90fac2SAndrew Rist#  KIND, either express or implied.  See the License for the
20*7e90fac2SAndrew Rist#  specific language governing permissions and limitations
21*7e90fac2SAndrew Rist#  under the License.
22*7e90fac2SAndrew Rist#
23*7e90fac2SAndrew Rist#**************************************************************
24*7e90fac2SAndrew Rist
25*7e90fac2SAndrew Rist
26cdf0e10cSrcweir
27cdf0e10cSrcweir# create java installer property files for all languages defined in jlf file
28cdf0e10cSrcweir
29cdf0e10cSrcweiruse Cwd;
30cdf0e10cSrcweiruse File::Copy;
31cdf0e10cSrcweir
32cdf0e10cSrcweirif( $#ARGV < 2 )
33cdf0e10cSrcweir  {
34cdf0e10cSrcweir    print <<ENDHELP;
35cdf0e10cSrcweirUSAGE: $0 <separator> <jlf_file_path> <outputpath>
36cdf0e10cSrcweir    <separator>: separator, used on the platform (slash or backslash)
37cdf0e10cSrcweir    <jlf_file_path>: path, in which the jlf file(s) can be found
38cdf0e10cSrcweir    <outputpath>: path, in which the property files will be created
39cdf0e10cSrcweirENDHELP
40cdf0e10cSrcweir  exit;
41cdf0e10cSrcweir  }
42cdf0e10cSrcweir
43cdf0e10cSrcweir$separator = $ARGV[0];
44cdf0e10cSrcweir$inputpath = $ARGV[1];
45cdf0e10cSrcweir$outputpath = $ARGV[2];
46cdf0e10cSrcweir
47cdf0e10cSrcweir$inputpath =~ s/\Q$separator\E\s*$//;
48cdf0e10cSrcweir$outputpath =~ s/\Q$separator\E\s*$//;
49cdf0e10cSrcweir
50cdf0e10cSrcweirif ( ! -d $outputpath ) { mkdir $outputpath; }
51cdf0e10cSrcweir
52cdf0e10cSrcweirprint "Separator: $separator \n";
53cdf0e10cSrcweirprint "Input path: $inputpath \n";
54cdf0e10cSrcweirprint "Output path: $outputpath \n";
55cdf0e10cSrcweir
56cdf0e10cSrcweirmy $localdir = cwd();
57cdf0e10cSrcweirmy $all_template_files = read_directory($localdir, "properties");
58cdf0e10cSrcweirmy $all_jlf_files = read_directory($inputpath, "jlf");
59cdf0e10cSrcweirmy $defaultlanguage = "en-US";
60cdf0e10cSrcweirmy $missing_jlf_file = "setupfiles.jlf";
61cdf0e10cSrcweirmy $alllanguages = get_all_languages($all_jlf_files);
62cdf0e10cSrcweirmy @allnewpropertyfiles = ();
63cdf0e10cSrcweir
64cdf0e10cSrcweirfor ( my $i = 0; $i <= $#{$all_template_files}; $i++ )
65cdf0e10cSrcweir{
66cdf0e10cSrcweir  my $template_file_name = ${$all_template_files}[$i];
67cdf0e10cSrcweir  my $complete_template_file_name = $localdir . $separator . $template_file_name;
68cdf0e10cSrcweir  my $jlf_file_name = get_jlf_file_name($template_file_name);
69cdf0e10cSrcweir  my $complete_jlf_file_name = $inputpath . $separator . $jlf_file_name;
70cdf0e10cSrcweir  print "Using template file: $complete_template_file_name\n";
71cdf0e10cSrcweir  my $jlf_file = "";
72cdf0e10cSrcweir  if ( ! ( $jlf_file_name eq $missing_jlf_file ))
73cdf0e10cSrcweir  {
74cdf0e10cSrcweir    print "Using translation file: $complete_jlf_file_name\n";
75cdf0e10cSrcweir    $jlf_file = read_file($complete_jlf_file_name);
76cdf0e10cSrcweir  }
77cdf0e10cSrcweir
78cdf0e10cSrcweir  for ( my $j = 0; $j <= $#{$alllanguages}; $j++ )
79cdf0e10cSrcweir  {
80cdf0e10cSrcweir    my $language = ${$alllanguages}[$j];
81cdf0e10cSrcweir    my $template_file = read_file($complete_template_file_name);
82cdf0e10cSrcweir    my $stringhash = create_string_hash($jlf_file, $language);
83cdf0e10cSrcweir    create_property_file($template_file, $stringhash);
84cdf0e10cSrcweir    my $filename = generate_filename($template_file_name, $language);
85cdf0e10cSrcweir
86cdf0e10cSrcweir    if ( $language eq $defaultlanguage )
87cdf0e10cSrcweir    {
88cdf0e10cSrcweir      # Creating language indenpendent english file
89cdf0e10cSrcweir      make_propertyfile_language_independent($template_file);
90cdf0e10cSrcweir      $filename = generate_filename($template_file_name, "");
91cdf0e10cSrcweir      save_file($outputpath, $filename, $template_file);
92cdf0e10cSrcweir    }
93cdf0e10cSrcweir    else
94cdf0e10cSrcweir    {
95cdf0e10cSrcweir      # Saving the non-english files
96cdf0e10cSrcweir      save_file($outputpath, $filename, $template_file);
97cdf0e10cSrcweir    }
98cdf0e10cSrcweir  }
99cdf0e10cSrcweir}
100cdf0e10cSrcweir
101cdf0e10cSrcweirexit;
102cdf0e10cSrcweir
103cdf0e10cSrcweirsub main::read_directory
104cdf0e10cSrcweir{
105cdf0e10cSrcweir  my ($dir, $ext) = @_;
106cdf0e10cSrcweir
107cdf0e10cSrcweir  my @content = ();
108cdf0e10cSrcweir  my $direntry;
109cdf0e10cSrcweir  opendir(DIR, $dir);
110cdf0e10cSrcweir
111cdf0e10cSrcweir  foreach $direntry (readdir (DIR))
112cdf0e10cSrcweir  {
113cdf0e10cSrcweir    next if $direntry eq ".";
114cdf0e10cSrcweir    next if $direntry eq "..";
115cdf0e10cSrcweir    next if ( ! ( $direntry =~ /\.\Q$ext\E\s*$/ ));
116cdf0e10cSrcweir
117cdf0e10cSrcweir    # my $completeentry = $dir . $separator . $direntry;
118cdf0e10cSrcweir    # push(@content, $completeentry);
119cdf0e10cSrcweir    push(@content, $direntry);
120cdf0e10cSrcweir  }
121cdf0e10cSrcweir
122cdf0e10cSrcweir  closedir(DIR);
123cdf0e10cSrcweir  return \@content;
124cdf0e10cSrcweir}
125cdf0e10cSrcweir
126cdf0e10cSrcweirsub main::read_file
127cdf0e10cSrcweir{
128cdf0e10cSrcweir  my ($filename) = @_;
129cdf0e10cSrcweir
130cdf0e10cSrcweir  open( IN, "<$filename" ) || die "cannot open $filename";
131cdf0e10cSrcweir  my @content = <IN>;
132cdf0e10cSrcweir  close( IN );
133cdf0e10cSrcweir
134cdf0e10cSrcweir  return \@content;
135cdf0e10cSrcweir}
136cdf0e10cSrcweir
137cdf0e10cSrcweirsub main::get_jlf_file_name
138cdf0e10cSrcweir{
139cdf0e10cSrcweir  my ($tempfilename) = @_;
140cdf0e10cSrcweir
141cdf0e10cSrcweir  my $jlffilename = "";
142cdf0e10cSrcweir
143cdf0e10cSrcweir  if ( $tempfilename =~ /^\s*(\w+)_template/ ) { $tempfilename = $1; }
144cdf0e10cSrcweir  $jlffilename = $tempfilename . "\.jlf";
145cdf0e10cSrcweir
146cdf0e10cSrcweir  return $jlffilename;
147cdf0e10cSrcweir}
148cdf0e10cSrcweir
149cdf0e10cSrcweirsub main::get_all_languages
150cdf0e10cSrcweir{
151cdf0e10cSrcweir  my ($alljlffiles) = @_;
152cdf0e10cSrcweir
153cdf0e10cSrcweir  my @languages = ();
154cdf0e10cSrcweir  my $record = 0;
155cdf0e10cSrcweir
156cdf0e10cSrcweir  my $first_jlf_file_name = $inputpath . $separator . ${$alljlffiles}[0];
157cdf0e10cSrcweir  my $jlffile = read_file($first_jlf_file_name);
158cdf0e10cSrcweir
159cdf0e10cSrcweir  for ( my $i = 0; $i <= $#{$jlffile}; $i++ )
160cdf0e10cSrcweir  {
161cdf0e10cSrcweir    if (( ${$jlffile}[$i] =~ /^\s*\[.*]\s*$/ ) && ( $record )) { last; }
162cdf0e10cSrcweir    if (( ${$jlffile}[$i] =~ /^\s*\[.*]\s*$/ ) && ( $record == 0 )) { $record = 1; }
163cdf0e10cSrcweir
164cdf0e10cSrcweir    if (( $record ) && ( ${$jlffile}[$i] =~ /^\s*(.+?)\s*\=/ ))
165cdf0e10cSrcweir    {
166cdf0e10cSrcweir      $language = $1;
167cdf0e10cSrcweir      push(@languages, $language);
168cdf0e10cSrcweir    }
169cdf0e10cSrcweir  }
170cdf0e10cSrcweir
171cdf0e10cSrcweir  my $languagestring = "";
172cdf0e10cSrcweir  for ( my $i = 0; $i <= $#languages; $i++ ) { $languagestring = $languagestring . $languages[$i] . ","; }
173cdf0e10cSrcweir  $languagestring =~ s/,\s*$//;
174cdf0e10cSrcweir  print "Languages: $languagestring\n";
175cdf0e10cSrcweir
176cdf0e10cSrcweir  return \@languages;
177cdf0e10cSrcweir}
178cdf0e10cSrcweir
179cdf0e10cSrcweirsub main::create_string_hash
180cdf0e10cSrcweir{
181cdf0e10cSrcweir  my ($jlffile, $language) = @_;
182cdf0e10cSrcweir
183cdf0e10cSrcweir  my %stringhash = ();
184cdf0e10cSrcweir  my $key = "";
185cdf0e10cSrcweir  my $value_defined = 0;
186cdf0e10cSrcweir
187cdf0e10cSrcweir  for ( my $i = 0; $i <= $#{$jlffile}; $i++ )
188cdf0e10cSrcweir  {
189cdf0e10cSrcweir    if ( ${$jlffile}[$i] =~ /^\s*\[(.*)\]\s*$/ )
190cdf0e10cSrcweir    {
191cdf0e10cSrcweir      $key = $1;
192cdf0e10cSrcweir      $value_defined = 0;
193cdf0e10cSrcweir    }
194cdf0e10cSrcweir
195cdf0e10cSrcweir    if (( ${$jlffile}[$i] =~ /^\s*\Q$defaultlanguage\E\s*=\s*\"(.*)\"\s*$/ ) && ( ! $value_defined ))
196cdf0e10cSrcweir    {
197cdf0e10cSrcweir      $value = $1;	# defaulting to english
198cdf0e10cSrcweir      $stringhash{$key} = $value;
199cdf0e10cSrcweir    }
200cdf0e10cSrcweir
201cdf0e10cSrcweir    if (( ${$jlffile}[$i] =~ /^\s*\Q$language\E\s*=\s*\"(.*)\"\s*$/ ) && ( ! $value_defined ))
202cdf0e10cSrcweir    {
203cdf0e10cSrcweir      $value = $1;
204cdf0e10cSrcweir      $stringhash{$key} = $value;
205cdf0e10cSrcweir      $value_defined = 1;
206cdf0e10cSrcweir    }
207cdf0e10cSrcweir  }
208cdf0e10cSrcweir
209cdf0e10cSrcweir  # additional replacement for ${LANGUAGE}, not defined in jlf file
210cdf0e10cSrcweir  my $languagekey = "LANGUAGE";
211cdf0e10cSrcweir  $stringhash{$languagekey} = $language;
212cdf0e10cSrcweir
213cdf0e10cSrcweir  # print_hash(\%stringhash);
214cdf0e10cSrcweir
215cdf0e10cSrcweir  return \%stringhash;
216cdf0e10cSrcweir}
217cdf0e10cSrcweir
218cdf0e10cSrcweirsub main::print_hash
219cdf0e10cSrcweir{
220cdf0e10cSrcweir  my ( $hashref ) = @_;
221cdf0e10cSrcweir
222cdf0e10cSrcweir  print "Hash contains:\n";
223cdf0e10cSrcweir
224cdf0e10cSrcweir  my $key;
225cdf0e10cSrcweir  foreach $key (keys %{$hashref} ) { print "Key: $key, Value: $hashref->{$key}\n"; }
226cdf0e10cSrcweir}
227cdf0e10cSrcweir
228cdf0e10cSrcweirsub main::create_property_file
229cdf0e10cSrcweir{
230cdf0e10cSrcweir  my ($template_file, $stringhash) = @_;
231cdf0e10cSrcweir
232cdf0e10cSrcweir  for ( my $i = 0; $i <= $#{$template_file}; $i++ )
233cdf0e10cSrcweir  {
234cdf0e10cSrcweir    if ( ${$template_file}[$i] =~ /\$\{(\w+)\}/ )
235cdf0e10cSrcweir    {
236cdf0e10cSrcweir      my $key = $1;
237cdf0e10cSrcweir
238cdf0e10cSrcweir      if ( exists($stringhash->{$key}) )
239cdf0e10cSrcweir      {
240cdf0e10cSrcweir        my $value = $stringhash->{$key};
241cdf0e10cSrcweir        ${$template_file}[$i] =~ s/\$\{\Q$key\E\}/$value/g;
242cdf0e10cSrcweir      }
243cdf0e10cSrcweir      else
244cdf0e10cSrcweir      {
245cdf0e10cSrcweir        print "Error: No value found for key: $key\n";
246cdf0e10cSrcweir        exit;
247cdf0e10cSrcweir      }
248cdf0e10cSrcweir    }
249cdf0e10cSrcweir  }
250cdf0e10cSrcweir}
251cdf0e10cSrcweir
252cdf0e10cSrcweirsub main::generate_filename
253cdf0e10cSrcweir{
254cdf0e10cSrcweir  my ($template_file_name, $onelanguage) = @_;
255cdf0e10cSrcweir
256cdf0e10cSrcweir  my $filename = $template_file_name;
257cdf0e10cSrcweir
258cdf0e10cSrcweir  if ( $onelanguage )
259cdf0e10cSrcweir  {
260cdf0e10cSrcweir    $onelanguage =~ s/-/_/;   # zh-TW -> zh_TW
261cdf0e10cSrcweir    $onelanguage = "_" . $onelanguage;
262cdf0e10cSrcweir    $filename =~ s/_template\./$onelanguage\./;
263cdf0e10cSrcweir  }
264cdf0e10cSrcweir  else
265cdf0e10cSrcweir  {
266cdf0e10cSrcweir    $filename =~ s/_template//;
267cdf0e10cSrcweir  }
268cdf0e10cSrcweir
269cdf0e10cSrcweir  return $filename;
270cdf0e10cSrcweir}
271cdf0e10cSrcweir
272cdf0e10cSrcweirsub make_propertyfile_language_independent
273cdf0e10cSrcweir{
274cdf0e10cSrcweir  my ($property_file) = @_;
275cdf0e10cSrcweir
276cdf0e10cSrcweir  for ( my $i = 0; $i <= $#{$property_file}; $i++ )
277cdf0e10cSrcweir  {
278cdf0e10cSrcweir#    if ( ${$property_file}[$i] =~ /^\s*#/ ) # only comment lines
279cdf0e10cSrcweir#    {
280cdf0e10cSrcweir      ${$property_file}[$i] =~ s/_\Q$defaultlanguage\E//;
281cdf0e10cSrcweir#    }
282cdf0e10cSrcweir  }
283cdf0e10cSrcweir}
284cdf0e10cSrcweir
285cdf0e10cSrcweirsub main::save_file
286cdf0e10cSrcweir{
287cdf0e10cSrcweir  my ($outputpath, $filename, $filecontent) = @_;
288cdf0e10cSrcweir
289cdf0e10cSrcweir  $filename = $outputpath . $separator . $filename;
290cdf0e10cSrcweir
291cdf0e10cSrcweir  if ( open( OUT, ">$filename" ) )
292cdf0e10cSrcweir  {
293cdf0e10cSrcweir    print OUT @{$filecontent};
294cdf0e10cSrcweir    close( OUT);
295cdf0e10cSrcweir  }
296cdf0e10cSrcweir
297cdf0e10cSrcweir  push(@allnewpropertyfiles, $filename);
298cdf0e10cSrcweir  print "Created file: $filename\n";
299cdf0e10cSrcweir}
300