1*cdf0e10cSrcweir#*************************************************************************
2*cdf0e10cSrcweir#
3*cdf0e10cSrcweir# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir#
5*cdf0e10cSrcweir# Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir#
7*cdf0e10cSrcweir# OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir#
9*cdf0e10cSrcweir# This file is part of OpenOffice.org.
10*cdf0e10cSrcweir#
11*cdf0e10cSrcweir# OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir# it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir# only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir#
15*cdf0e10cSrcweir# OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir# but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir# GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir# (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir#
21*cdf0e10cSrcweir# You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir# version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir# <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir# for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir#
26*cdf0e10cSrcweir#*************************************************************************
27*cdf0e10cSrcweir
28*cdf0e10cSrcweiruse warnings;
29*cdf0e10cSrcweiruse strict;
30*cdf0e10cSrcweiruse diagnostics;
31*cdf0e10cSrcweir
32*cdf0e10cSrcweirsub trim;
33*cdf0e10cSrcweirsub readRedirectionValues($);
34*cdf0e10cSrcweir
35*cdf0e10cSrcweirmy $usage =
36*cdf0e10cSrcweir   "Usage is: \n subst_template.pl configTemplate redirections policyConfig
37*cdf0e10cSrcweir
38*cdf0e10cSrcweir   configTemplate: The config file which is used for the policy assembly. It
39*cdf0e10cSrcweir   contains place holders for the binding redirection.
40*cdf0e10cSrcweir
41*cdf0e10cSrcweir   redirections: file containing the values for oldVersion and newVersion tags
42*cdf0e10cSrcweir   which are used in the BindingRedirect element of the config files.
43*cdf0e10cSrcweir
44*cdf0e10cSrcweir   policyConfig: Name of the file in which we want to write the config file.
45*cdf0e10cSrcweir";
46*cdf0e10cSrcweir
47*cdf0e10cSrcweir
48*cdf0e10cSrcweirif (scalar @ARGV < 3) {
49*cdf0e10cSrcweir   print $usage;
50*cdf0e10cSrcweir   exit -1;
51*cdf0e10cSrcweir}
52*cdf0e10cSrcweir
53*cdf0e10cSrcweir
54*cdf0e10cSrcweirmy %redirectionValue = readRedirectionValues($ARGV[1]);
55*cdf0e10cSrcweir#print "|$_|  |$redirectionValue{$_}|\n",  for keys %redirectionValue;
56*cdf0e10cSrcweir
57*cdf0e10cSrcweir
58*cdf0e10cSrcweir#Read config file in which we will replace the versions
59*cdf0e10cSrcweir$/ = undef;
60*cdf0e10cSrcweiropen TEMPLATE, $ARGV[0] or die $!;
61*cdf0e10cSrcweirmy $templ = <TEMPLATE>;
62*cdf0e10cSrcweir
63*cdf0e10cSrcweir#Open the config file we are goint to write to
64*cdf0e10cSrcweiropen CONFIG, "> $ARGV[2]" or die "Cannot write to $ARGV[2] $!";
65*cdf0e10cSrcweir
66*cdf0e10cSrcweir#No substitute the place holders for oldVersion and new Version in the config template with
67*cdf0e10cSrcweir#the values obtained from the redirections file
68*cdf0e10cSrcweirfor (keys %redirectionValue) {
69*cdf0e10cSrcweir    $templ=~ s/\b$_\b/$redirectionValue{$_}/;
70*cdf0e10cSrcweir}
71*cdf0e10cSrcweir#Write the config file
72*cdf0e10cSrcweirprint CONFIG $templ;
73*cdf0e10cSrcweir
74*cdf0e10cSrcweir#Reads the key value pairs from the files, which name must be passed in
75*cdf0e10cSrcweir#the parameter. The file contains lines of the form name=value, for example
76*cdf0e10cSrcweir#CLI_TYPES_OLD_VERSION=1.1.0.0-1.1.1.0
77*cdf0e10cSrcweirsub readRedirectionValues($)
78*cdf0e10cSrcweir{
79*cdf0e10cSrcweir    #Read in the values for the version redirection
80*cdf0e10cSrcweir    open REDIR, $_[0] or die $!;
81*cdf0e10cSrcweir
82*cdf0e10cSrcweir    my %redirectionValues;
83*cdf0e10cSrcweir
84*cdf0e10cSrcweir    while (<REDIR>)
85*cdf0e10cSrcweir    {
86*cdf0e10cSrcweir        chomp;
87*cdf0e10cSrcweir	my $trimmed;
88*cdf0e10cSrcweir        #Skip empty lines
89*cdf0e10cSrcweir        if (length($trimmed = trim($_)) == 0) {
90*cdf0e10cSrcweir            next;
91*cdf0e10cSrcweir        }
92*cdf0e10cSrcweir
93*cdf0e10cSrcweir	#Skip comment symbol: #
94*cdf0e10cSrcweir	if ($trimmed =~ /^#/) {
95*cdf0e10cSrcweir	    next;
96*cdf0e10cSrcweir	}
97*cdf0e10cSrcweir
98*cdf0e10cSrcweir        my @lineParts = split /=/,$_;
99*cdf0e10cSrcweir
100*cdf0e10cSrcweir        #Check if we have valid name value pairs.
101*cdf0e10cSrcweir        if (scalar @lineParts != 2) {
102*cdf0e10cSrcweir            print "Error: Values in $ARGV[1] are not correct (Entries must have the form name=value). Invalid line: \n$_\n";
103*cdf0e10cSrcweir            exit -1;
104*cdf0e10cSrcweir        }
105*cdf0e10cSrcweir
106*cdf0e10cSrcweir        #Trim the strings and check if they still contain characters
107*cdf0e10cSrcweir        my $name = trim($lineParts[0]);
108*cdf0e10cSrcweir        my $value = trim($lineParts[1]);
109*cdf0e10cSrcweir        if (length($name) == 0 || length($value) == 0) {
110*cdf0e10cSrcweir            print "Error: Values in $ARGV[1] are not correct. Invalid line: \n$_\n";
111*cdf0e10cSrcweir            exit -1;
112*cdf0e10cSrcweir        }
113*cdf0e10cSrcweir
114*cdf0e10cSrcweir        #Check if we have duplicate key names
115*cdf0e10cSrcweir        for (keys %redirectionValues) {
116*cdf0e10cSrcweir            if ( $name eq $_) {
117*cdf0e10cSrcweir                print "Error: Values in $ARGV[1] are not correct. The name $_ is not unique.\n";
118*cdf0e10cSrcweir                exit -1;
119*cdf0e10cSrcweir            }
120*cdf0e10cSrcweir        }
121*cdf0e10cSrcweir
122*cdf0e10cSrcweir        $redirectionValues{$name} = $value;
123*cdf0e10cSrcweir    }
124*cdf0e10cSrcweir    return %redirectionValues;
125*cdf0e10cSrcweir}
126*cdf0e10cSrcweir
127*cdf0e10cSrcweirsub trim($)
128*cdf0e10cSrcweir{
129*cdf0e10cSrcweir	my $string = shift;
130*cdf0e10cSrcweir	$string =~ s/^\s+//;
131*cdf0e10cSrcweir	$string =~ s/\s+$//;
132*cdf0e10cSrcweir	return $string;
133*cdf0e10cSrcweir}
134